Windows API for VISTA,7&外

时间:2009-07-19 01:03:30

标签: winapi windows-7 windows-vista

WinAPI / Win32有什么根本区别吗?是否还需要其他知识来利用新的OS功能?

过去编译过Win32应用程序的人是否有任何陷阱?

我不是在谈论Silverlight,这是一个完全不同的蜡球。 (我还没有在工作中支持它的VS。)

编辑: 到目前为止,Drew有一个非常好的答案,但对于程序员来说,什么是至关重要的? 即查尔斯·佩佐尔德的书的附录应该是什么? (理论上)

5 个答案:

答案 0 :(得分: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风格的菜单,该功能区可用于Vista和Win7。

如果您使用的是通用控件库,请确保使用v6,而不是默认的v5。

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

我现在所能想到的一切。

答案 1 :(得分:3)

There are new API's for each.

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

答案 2 :(得分:2)

您可以选择:传统的C / C ++或使用较新的.Net框架语言(C#/ VB.net / Python.net等)。对于后者,了解框架比实施更重要。你已经从指针,线程,缓冲区和内存管理中分离出来了(除此之外)一旦你知道它可以在语言之间移植(例如,你可以轻松地获取VB.net编程),除了语法上的一些差异之外一个C#家伙,你的应用程序将做的大部分工作是调用框架的一部分)。您可以在C#中创建一个类,在VB.net程序中使用它,并从Powershell cmdlet引用同一个类。例如。

老式的C接口​​仍然适用于Win32,但除非你有特定的需要使用它们(例如遗留代码,Direct X,设备驱动程序),我会看一下新的东西。至于像WPF这样的东西,甚至没有通过非托管代码的直接路由 - 你必须跳过各种丑陋的互操作环。

答案 3 :(得分:1)

没什么特别的。旧的东西几乎像它一样工作。 有一些新的API,但没有什么惊天动地(并遵循旧的Win32约定)。 所以你在Vista中所知道的一切对Win7来说都是正确的。

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

答案 4 :(得分:1)

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