在本机应用程序中使用 win32

Posted

技术标签:

【中文标题】在本机应用程序中使用 win32【英文标题】:using win32 in native applications 【发布时间】:2011-07-20 18:13:15 【问题描述】:

是否需要在完整的原生应用程序中使用win32,或者使用VC++ Express的可视化模式代替。

我想知道像游戏引擎这样的大程序,他们是否使用win32来展示他们的工具集?

【问题讨论】:

【参考方案1】:

Win32 API 基本上是一组处理低级 Windows 对象(如窗口、控件、套接字等)的过程。所以,如果你说“native”,那意味着你可以做任何事情的唯一方法就是使用 Win32 API。

从底层的角度来看,游戏引擎是相当原始的。游戏引擎主要是算法、多边形(而不是低级三角形)、纹理和其他类似的抽象。从 Windows 的角度来看,它就像“创建窗口”、“初始化 OpenGL”,仅此而已。所有其他的东西大多与 Windows 无关,而是跨平台的。例如,OpenGL 与 Windows、Linux 或 Mac OS 等任何特定平台无关,OpenGL 总是相同的。唯一不同的是如何创建 Window 和初始化 OpenGL。

【讨论】:

我知道。我用不同的引擎制作游戏 7 年。因为我想开始用SFML写一个2d游戏引擎,所以我想我应该得到一些关于开始的信息。 如果你已经做了 7 年,你可能应该知道所有或多或少的优秀游戏引擎都是跨平台的,它们为你做了所有这些低级的事情,所以你可以只专注于你真正做的事情。我是一名 10 年的 Windows 程序员,我相信,如果你可以不用 Win32 API,那就不用 Win32 API。对于“真正的”开发来说,它已经过时了。例如,如果您只想拥有一个空窗口,那么纯原生实现大约需要 50 行代码。 @lok​​i2302:你确实对“真正的”开发有不同寻常的定义。特别是因为它是 Windows 操作系统的 API,并且每个 Windows 应用程序都必须在某些时候与 Windows API 交互。是的,您需要一些代码来制作窗口,但正如您所说,它是低级的,您可以将它包装在某种框架或库中。 @In_silico:真正的开发是当您使用编程解决业务问题时。就这样。这就是为什么有人付钱给你。不是因为您知道 Windows 是如何工作的,而是因为您解决了问题。如果您必须花费 4 个小时才能获得一个空窗口,那么它更像是黑客而不是开发。 @lok​​i2302:你知道,当你进入游戏制作的过程中,几年后你会意识到你应该让你的脚步不断地留在这个行业。所以为此我应该制造自己的引擎。我完全想知道是什么让游戏引擎在使用视觉效果的同时使用原生。当然你是对的,但是如果你说在 Windows、ios 等不同平台上是原生的……这是真的平台。无论如何感谢您的建议。【参考方案2】:

对于 Windows,“Win32”和“本机代码”基本上是一回事。如果您使用 .NET 来构建您的界面,那么它不是本机代码。当然,您可以编写混合原生组件和 .NET 组件的代码。

大预算游戏通常使用本机代码编写以方便移植,因为它们必须在 Windows、Xbox 360、PS3 以及可能的 Wii 或 Mac 上运行。我确信有例外,但我不知道有任何主要软件可以在多个平台上运行并且完全使用托管代码编写。

【讨论】:

请详细说明您认为编写“本机代码”可以简化移植的原因。我不同意。我认为游戏这样做的原因只是为了性能。 因为(几乎)每个平台都有 C++,而用 C# 为 Nintendo 3DS 编写游戏不会走得太远。这就是我的意思。

以上是关于在本机应用程序中使用 win32的主要内容,如果未能解决你的问题,请参考以下文章

使用 Visual Studio 将 HTML 浏览器嵌入到本机 C++/Win32 项目中

python --获取本机屏幕分辨率

将桌面桥 UWP 应用与 Win32 应用正确打包

在本机 C++ 中停靠控件

softwarebundler:win32/xiazai是啥?为啥报病毒?

将对象列表从 c# 传递到糟糕的 c++ win32 本机 dll 的最有效方法是啥?