masm x64中的CreateWindowEx

时间:2016-01-16 06:01:35

标签: assembly 64-bit masm

我使用x64 masm在Windows 10下进行汇编编码,非常享受!在25年的时间里没有碰过装配 - 大学日。目前正在学习和做基本的事情,并且相当快速地加快速度。

我想拥有一个GUI前端,就像一个Window,在轨道下面有一个菜单和子窗口......

实现这一目标的两种传统方式(我猜)是:

  • 在程序集中使用CreateWindowEx和相关的Windows API函数,或者

  • 使用Visual C ++构建前端,然后使用masm代码编写程序的其他区域

既然我只是为了好玩而编程,并且只想使用汇编语言,那么第一个选项对我来说是唯一的。

但我在一个组装论坛上看到,不建议通过程序集构建/调用Windows。我不知道为什么?我只能想象,因为与通过VC ++等高级语言构建前端相比,这有点痛苦。

问题

任何不通过程序集/ CreateWindowEx构建GUI Windows前端的原因......?

通过DirectX构建Windows是一个疯狂的想法吗?

仅使用程序集构建前端的任何其他技术?

1 个答案:

答案 0 :(得分:3)

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

当您在Windows中构建GUI时,您最终会调用一个众所周知且主要是标准的 API 1 按顺序,通常使用非常基本的控制流程,如单分支ifs。 当然,对于每个应用程序来说都不是这样,但主要是这样。

长话短说,在这种情况下,用C编写GUI或在汇编中编写并不会产生很大的差异,最多 重要的是你调用API函数 2 的不同方式。

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

<强>答案

  1. 我无法想到任何不在程序集中构建GUI的理由。我实际上已经多次这样做了,而且我已经变得和在C.中做得一样快 我无法想到任何优势,但很有趣 您可以在与之相关的装配中做什么 GUI创建 3 也可以在C中完成。

  2. 这根本不是一个疯狂的想法,就我所知,WPF确实是这样做的。 从头做这个,虽然是一个非常有趣和有趣的练习,但需要相当长的时间,因为你必须编写代码来绘制每个控件/小部件以及控制它们的代码。登记/> 使用程序集中的DirectX,或任何没有COM自然支持的语言,将是一个非常讨厌的东西。我曾经在汇编中使用过DirectX,很容易迷失在指向接口指针的指针中,以获取指向方法的指针。
    此外,您需要彻底了解COM的工作原理并在IDL文件中来回查看。

  3. 正如您在第二点所说,您可以使用像Visual C ++这样的WYSIWYG IDE来创建 具有Dialog定义的资源文件,然后使用DialogBoxParam等函数从资源中进行对话。
    没有涉及C代码,只有资源文件 4 ,您可以使用Visual Studio的资源编译器进行编译并链接您的可执行文件。任何现代链接器(包括旧的 TLINK )都可以链接资源文件。

  4. 1 众所周知的RegisterClassExCreateWindowsExGetMessageTranslateMessageDispatchMessage,{{1 API。

    2 X64调用约定可能比一些更棘手 x86一个。

    3 你主要存储/加载值,有时你需要一个指针,有时你可以做更多的事情 优雅与功能指针。您永远不需要特定的架构指令,即 在乐趣旁边使用汇编的主要原因。

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