【问题标题】:Windows API for VISTA, 7 & Beyond适用于 VISTA、7 及更高版本的 Windows API
【发布时间】:2010-11-12 01:12:59
【问题描述】:

WinAPI/Win32 有什么根本区别吗?是否需要任何其他知识才能利用新的操作系统功能?

过去编写过 Win32 应用程序的人是否可能会陷入任何陷阱?

我不是在谈论 Silverlight,那是一个完全不同的蜡球。 (我还没有支持该功能的 VS。)

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

【问题讨论】:

  • 也许我不应该在周末发布这个。观看次数不多。
  • 那家伙不是叫查尔斯·佩佐德吗?
  • 请注意,我发现一些新的 API 可以从 C++ 调用,但不能从 C 调用,至少不是没有一些麻烦。 SHGetKnownFolderPath() 是我目前正在努力解决的问题。

标签: winapi windows-7 windows-vista


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以选择:传统的 C/C++ 或使用更新的 .Net 框架语言(C# / VB.net / Python.net 等)。对于后者,了解框架比实现更重要。您(通常)与指针、线程、缓冲区和内存管理隔离,并且一旦您知道它在语言之间可移植的框架,除了语法上的一些差异(即,如果您是一个 C# 家伙,因为您的应用程序将做的大部分事情都是调用框架的一部分)。例如,您可以在 C# 中创建一个类,在 VB.net 程序中使用它并从 Powershell cmdlet 中引用相同的类。

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

    【讨论】:

      【解决方案3】:

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

      哲学变革
      大部分旧的 win32 API 都集中在传递句柄的 C 样式 API。如今,许多正在开发的新 API 都是基于 COM 的,因此在 COM 和 ATL 上加倍努力是值得的。

      如果您正在编写自己的库,您可能还需要注意新的 API 样式,这种样式更加一致并且避免使用匈牙利符号。

      替换
      一般来说,不要以为你在 10 年前就知道的方法仍然是最先进的;它们都仍然存在,所以你不一定会被告知你做错了。检查 MSDN 以查看它是否为您推荐了更好的东西,并使用最新的 SDK,以便您会收到某些功能的弃用警告。特别是,确保您使用的字符串函数是安全的。

      具体来说,一个“替代”API 是 Direct 2d,它是一种用于 UI 的 DirectX 风格的 API。如果您正在为 Windows 7 编写图形代码,您应该考虑 Direct2d over GDI,它的编程模型与 GDI 兼容但又非常不同。 Direct 2d 可能会被移植回 Vista。

      另外,不要使用 win32 样式的菜单,而应考虑使用功能区,它适用于 Vista 和 Win7。

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

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

      暂时能想到的。

      【讨论】:

      • 我想他们推荐使用 Ribbons,但他们不需要,对吧?我真的不在乎新办公室的“外观和感觉”。我觉得它不是一个干净的界面。
      • GDI 是一个 SLOW 库,很高兴看到它被替换。几乎就像他们尝试过让 GDI 变慢一样。在微软决定修复自己的慢速软件之前,苹果的 OSX 说它使用了硬件优势。
      • @Pete:旧的工具栏和菜单还在,是的。
      • "所有正在开发的新 API 都是基于 COM 的" 事实并非如此。
      • @Mihai:反例?我不怀疑你,但我所知道的都是 COM - shell、设备阶段、功能区、动画、d2d、传感器和位置。
      【解决方案4】:

      There are new API's for each.

      还有一些额外的知识,虽然可能不是必需的,但您应该熟悉 64 位和多线程应用程序开发等等。 Direct2D、.NET等更高层次的结构是需要知识调整的,不一定是低层次的API。

      【讨论】:

      • 就您链接中的 Windows 7 列表而言,不要认为它很全面。例如,它没有提及任何 COM 接口,因此它只是实际新功能的一个相当微不足道的子集。
      • 还有更占卜的资源吗?
      【解决方案5】:

      没什么特别的。旧的东西几乎可以正常工作。 有一些新的 API,但没有什么惊天动地的(并且遵循旧的 Win32 约定)。 所以你从 Vista 中知道的一切对于 Win7 仍然适用。

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

      【讨论】:

        猜你喜欢
        • 2017-05-06
        • 1970-01-01
        • 2019-10-06
        • 1970-01-01
        • 1970-01-01
        • 2013-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多