Windows API for VISTA, 7 & Beyond

8
有没有WinAPI/Win32之间的基本区别?是否需要额外的知识来利用新的操作系统功能?
过去编写Win32应用程序的人可能会遇到什么问题?
我不是在谈论Silverlight,那是完全不同的事情。(我还没有在工作中使用支持它的VS。)
编辑: Drew目前有一个相当好的答案,但对于程序员来说,什么是关键的呢? 即,Charles Petzold的书的附录应该包括什么?(理论上)

也许我不应该在周末发布这个。浏览量不是很多。 - NoMoreZealots
2
那个人的名字不是 Charles Petzold 吗? - anonymous
只是想提醒一下,我发现一些新的API可以从C++中调用,但不能从C中调用,至少不是没有一些麻烦。SHGetKnownFolderPath()是我目前正在努力解决的一个问题。 - hippietrail
5个回答

14

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

哲学性改变
旧Win32 API的大部分重点放在传递句柄的C风格API上。现在,许多正在开发的新API是基于COM的,因此熟悉COM和ATL会很有价值。

如果您正在编写自己的库,您可能还想注意新的API样式,这种样式更加一致,避免使用匈牙利命名法等。

替代品
通常,不要假设您10年前了解的方法仍然是最先进的;它们仍然存在,因此您不一定会被告知您的操作方式不正确。请查看MSDN,看看它是否将您转向更好的东西,并使用最新的SDK,以便某些函数会出现不推荐使用警告。特别是,确保您正在使用的字符串函数是安全的。

具体而言,“替换”API之一是Direct 2d,这是用于UI的DirectX样式API。如果您为Windows 7编写图形代码,则应考虑使用Direct2d而不是GDI,其编程模型与GDI非常不同但又兼容。Direct 2d可以转移到Vista。

此外,不要使用Win32样式的菜单,而是考虑使用Ribbon,它将适用于Vista和Win7。

如果使用公共控件库,请务必使用v6,而不是默认的v5。

最后,请确保您不会不必要地调用需要管理员权限的内容,因为这将提示UAC。

这就是我现在能想到的全部。


1
我想他们建议使用Ribbon,但并不要求使用,对吧?我真的不喜欢新办公室的“外观和感觉”。对我来说,它不像一个清晰的界面。 - NoMoreZealots
GDI是一个缓慢的库,很高兴看到它被替换了。就像他们试图让GDI变慢一样。在苹果的OSX声称使用硬件加速之前,微软才决定修复他们自己的缓慢软件。 - NoMoreZealots
@Pete:旧的工具栏和菜单仍然存在,是的。 - Drew Hoskins
所有正在开发的新API都是基于COM的,这并不是真实情况。 - Mihai Nita
@Mihai:反例?我不怀疑你,但我知道的所有反例都是COM - shell、设备阶段、功能区、动画、d2d、传感器和位置。 - Drew Hoskins
据我记得,Direct2D取代了DirectDraw。 - Powerlord

3

每个API都有新的版本。

虽然可能不是必需的,但您应该熟悉64位和多线程应用程序开发等其他知识。更高级别的构造,如Direct2D、.NET等,需要调整知识,而不一定是较低级别的API。


1
就你链接中的Windows 7列表而言,不要认为它是全面的。例如,它没有提到任何COM接口,因此它只是实际新功能的一个微不足道的子集。 - Drew Hoskins
有更好的资源吗? - NoMoreZealots

2

你可以选择传统的C/C++,也可以使用较新的.NET框架语言(例如C# / VB.net / Python.net等)。对于后者来说,更重要的是了解框架而不是实现。通常情况下,你与指针、线程、缓冲区和内存管理隔离开来。一旦你掌握了框架,就能够在各种语言之间轻松切换(例如,如果你是C#开发人员,你也可以轻松地学习VB.net编程,因为你的应用程序将调用框架的大部分内容)。你可以在C#中创建一个类,并在VB.net程序中使用它,在PowerShell cmdlet中引用同一类。

老式的C接口仍然适用于Win32,但除非你有特定需要(如遗留代码、Direct X、设备驱动程序等),否则我建议你看看更新的东西。至于像WPF这样的东西,甚至没有通过非托管代码的直接路径-你必须跳过各种丑陋的Interop障碍。


1

完整性级别也是一个值得了解的好东西。根据您的应用程序的性质,如果它试图执行涉及在操作系统上运行的其他进程的任何操作,则了解此内容非常重要。该技术防止较低完整性级别的进程与正在以较高完整性级别运行的进程进行交互。这包括消息传递、钩子、DLL注入、打开句柄和许多其他技术。


1

没有什么特别的。旧的东西基本上还是像以前一样工作。 有一些新的API,但没有什么惊天动地的变化(并且遵循旧的Win32约定)。 所以你从Vista中了解的一切对Win7仍然适用。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接