Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 适用于VISTA、7&;的Windows API;超过_Winapi_Windows 7_Windows Vista - Fatal编程技术网

Winapi 适用于VISTA、7&;的Windows API;超过

Winapi 适用于VISTA、7&;的Windows API;超过,winapi,windows-7,windows-vista,Winapi,Windows 7,Windows Vista,WinAPI/Win32之间有什么根本性的区别吗?利用新的操作系统功能需要额外的知识吗 过去编写Win32应用程序的人可能会遇到什么陷阱 我不是说Silverlight,那是一个完全不同的蜡球。(我还没有支持这一点的VS。) 编辑: 到目前为止,Drew有一个很好的答案,但是对于一个程序员来说,了解什么是至关重要的呢? i、 e.查尔斯·佩佐尔德的书的附录中应该有什么?(理论上)没什么特别的。旧的东西几乎像它那样工作。 有一些新的API,但没有什么惊天动地的(并且遵循旧的Win32约定)。 因此

WinAPI/Win32之间有什么根本性的区别吗?利用新的操作系统功能需要额外的知识吗

过去编写Win32应用程序的人可能会遇到什么陷阱

我不是说Silverlight,那是一个完全不同的蜡球。(我还没有支持这一点的VS。)

编辑: 到目前为止,Drew有一个很好的答案,但是对于一个程序员来说,了解什么是至关重要的呢?
i、 e.查尔斯·佩佐尔德的书的附录中应该有什么?(理论上)没什么特别的。旧的东西几乎像它那样工作。 有一些新的API,但没有什么惊天动地的(并且遵循旧的Win32约定)。 因此,您从Vista中了解的一切对于Win7仍然适用

现在,有一些关于用户体验的新指南(触摸屏、库(用户体验的东西,而不是程序员的东西)),但API风格是一样的。


还有其他知识,尽管可能不需要,但您应该熟悉64位和多线程应用程序开发。更高层次的结构,如Direct2D、.NET等,需要在知识上进行调整,而不一定是较低层次的API。

当然,有很多新的API需要注意,以确保您拥有所需的工具。除此之外,还有一些需要注意的变化

哲学变革
旧的win32 API的大部分集中在传递句柄的C风格API上。如今,许多正在开发的新API都是基于COM的,因此在COM和ATL上进行Bonng是值得的

如果您正在编写自己的库,您可能还需要注意新的API样式,这种样式更加一致,避免了匈牙利符号之类的东西

替换
一般来说,不要假设你10年前知道的方法仍然是最先进的;它们都仍然存在,所以你不一定会被告知你做错了。检查MSDN,看看它是否向您推荐了更好的软件,并使用最新的SDK,这样您将收到一些函数的弃用警告。尤其要确保所使用的字符串函数是安全的

具体来说,一个“替换”API是Direct2D,它是用于UI的DirectX样式的API。如果你正在编写Windows 7的图形代码,你应该考虑GDI上的Digt2D,它有一个与GDI兼容但非常不同的编程模型。Direct2D可以移植回Vista

此外,不要使用Win32样式菜单,考虑使用色带,这将适用于Vista和Win7..p/P> 如果您使用的是公共控件库,请确保使用v6,而不是v5的默认版本

最后,确保您没有不必要地调用需要管理员权限的东西,因为这将提示UAC


现在我能想到的一切。

你可以选择:传统的C/C++或使用较新的.Net框架语言(C#/VB.Net/Python.Net等)。对于后者来说,了解框架比实现更重要。你(通常)与指针、线程、缓冲区和内存管理隔离开来,除了在语法上的一些差异之外,一旦你了解了框架,它就可以在不同语言之间移植(也就是说,如果你是一个C语言的人,你可以很容易地学会VB.net编程,因为你的大多数应用程序都会调用框架的一部分)。例如,您可以在C#中创建一个类,在VB.net程序中使用它,并从Powershell cmdlet中引用同一个类


旧式的C接口仍然适用于Win32,但除非您有使用它们的特殊需要(例如遗留代码、Direct X、设备驱动程序),否则我会考虑更新的东西。至于像WPF这样的东西,甚至没有一条通过非托管代码直接进入的路线——您必须跳过各种难看的互操作障碍。

也是一件值得学习的好事情。根据应用程序的性质,如果它试图执行任何涉及操作系统上运行的其他进程的操作,了解这一点很重要。此技术可防止完整性级别较低的进程与完整性级别较高的进程交互。这包括消息传递、挂钩、DLL注入、打开句柄和许多其他技术。

对于链接中的Windows 7列表,不要认为它很全面。例如,它没有提到任何COM接口,因此它只是实际新功能的一个很小的子集。有更具预言性的资源吗?我想他们建议使用Ribbon,但他们不需要它,对吗?我真的不喜欢新办公室的“外观和感觉”。我觉得它不是一个干净的界面。GDI是一个缓慢的库,很高兴看到它被替换。这几乎就像他们试图让GDI变慢一样。直到苹果的OSX说它使用了硬件卓越,微软才决定修复它自己的缓慢的软件。@Pete:旧的工具栏和菜单仍然存在,是的。“所有正在开发的新API都是基于COM的”事实并非如此。@Mihai:反例?我不怀疑你,但我所知道的都是COM-shell、设备舞台、功能区、动画、d2d、传感器和位置。也许我不应该在周末发布这篇文章。没有很多观点。那家伙的名字不是Charles Petzold吗?只是我发现一些新的API可以从C++调用,但不能从C调用,至少没有一些麻烦。code>SHGetKnownFolderPath()是我目前正在努力解决的问题。