masm x64 中的 CreateWindowEx

CreateWindowEx in masm x64

我正在使用 x64 masm 在 Windows10 下进行汇编编码,真的很享受!大概有 25 年没有接触过汇编了——大学时代。目前正在学习和做一些基本的事情,并且很快就能上手。

我想要一个 GUI 前端,例如 Window,并且沿着轨道有一个菜单和子 windows...

实现此目的的 2 种传统方法(我猜)是:

现在因为我纯粹是为了好玩而编程,并且只想坚持使用汇编语言,所以第一个选项对我来说是唯一的。

但我在一个汇编论坛上读到,不建议 build/call Windows 通过汇编。我不确定为什么?我只能想象,因为与通过 VC++.

等高级语言构建前端相比,这有点痛苦

问题:

有什么理由不通过 assembly/CreateWindowEx...构建 GUI Windows 前端?

通过 DirectX 构建 Windows 会不会是个疯狂的想法?

还有其他仅使用汇编构建前端的技术吗?

我没有专门在 Windows 10 中做过任何编程,所以这可能有点过时了。

当您在 Windows 中构建 GUI 时,您最终会调用 众所周知且大部分是标准的 集 APIs1 按顺序,通常使用 非常基本的控制流程 ,如单分支 ifs。 当然,这并非适用于所有应用程序,但适用于大多数应用程序。

长话短说,在这种情况下,用 C 或汇编语言编写 GUI 没有太大区别,最 重要的是您调用 API 函数的不同方式2.

从 OS 和 CPU 的角度来看,用 汇编和用任何其他语言编写的编译为本机指令的程序。
此外,如果您使用良好的编码风格或像 MASM INVOKE 这样的高级指令,那么在创建 GUI 时,C 和汇编之间的工作几乎没有区别。

答案

  1. 我想不出有什么理由不在汇编中构建 GUI。我实际上已经这样做了很多次,而且我已经变得和用 C 语言一样快了。
    我也想不出有什么优点,但是很好玩
    您可以在与以下相关的程序集中做什么 GUI 的创建3 也可以在 C 中完成。

  2. 这根本不是一个疯狂的想法,据我所知,这确实是 WPF 实际所做的。
    从头开始做,虽然是一个非常有趣和有趣的练习,但是会花费 相当长的时间 ,因为你必须编写代码来绘制每个 control/widget 加上代码来控制他们。
    然而,从汇编或任何不自然支持 COM 的语言使用 DirectX 将是一件非常讨厌的事情。我曾经在汇编中使用过 DirectX,很容易迷失在指向接口指针的指针中以获取指向方法的指针。
    此外,您需要透彻了解 COM 的工作原理并反复查看 IDL 文件。

  3. 正如你在第二点中所说的,你可以像 Visual C++ 一样使用所见即所得 IDE 创建 一个带有 Dialog 定义的资源文件,然后使用 DialogBoxParam 之类的函数从资源中创建一个对话框。
    不涉及 C 代码,只有一个资源文件 4,您可以使用 Visual Studio 和 link 的资源编译器对您的可执行文件进行编译。任何现代的 linker,包括旧的 TLINK,都可以 link 资源文件。


1众所周知RegisterClassEx,CreateWindowsEx,GetMessage,TranslateMessage,DispatchMessage, DefWindowProc APIs.

2 X64 调用约定可能比 x86之一。

3 你主要是 store/load 值,有时你需要一个指针,有时你可以让事情变得更多 优雅的函数指针。您永远不需要特定的体系结构说明,这是 使用 assembly 的主要原因除了乐趣。

4 这是一个简单的文本文件,格式非常简单。你可以用记事本自己编码 如果你脑子里有坐标系,我习惯这样做是为了避免使用Visual C++。