Assembly masm x64中的CreateWindowEx

Assembly masm x64中的CreateWindowEx,assembly,64-bit,masm,Assembly,64 Bit,Masm,我正在使用x64 masm在windows10下的汇编中编写代码,我真的很喜欢它!已经25年没碰过装配了——大学时代。目前正在学习和做一些基本的事情,并且相当快地掌握了速度 我想有一个GUI前端,像一个窗口,并在轨道下有一个菜单和子窗口 实现这一目标的两种传统方法(我想)是: 在程序集中使用CreateWindowEx和相关的Windows API函数,或 >p>用Visual C++构建前端,然后用MASM代码为程序的其他区域 现在,因为我编程纯粹是为了好玩,而且只想使用汇编语言,所以第

我正在使用x64 masm在windows10下的汇编中编写代码,我真的很喜欢它!已经25年没碰过装配了——大学时代。目前正在学习和做一些基本的事情,并且相当快地掌握了速度

我想有一个GUI前端,像一个窗口,并在轨道下有一个菜单和子窗口

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

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

  • >p>用Visual C++构建前端,然后用MASM代码为程序的其他区域

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

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

问题

有没有理由不通过assembly/CreateWindowEx构建GUI Windows前端

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

是否有其他技术仅使用汇编构建前端?

我没有专门在Windows 10中进行任何编程,因此这可能有点过时

当您在Windows中构建GUI时,您最终会调用一组众所周知且主要是标准的API 1 按顺序,通常与非常基本的控制流类似于单分支ifs。 当然,这并不适用于所有应用程序,但适用于大多数应用程序

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

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

答案

  • 我想不出任何理由不在汇编中构建GUI。事实上,我已经做了很多次了,而且我的速度已经和C语言一样快了。
    我想不出有什么好处,但很有趣。
    您可以在与 GUI的创建也可以用C语言完成

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

  • >P>正如您在第二点所说的,可以使用WYSIWYG IDE,如Visual C++来创建 创建一个具有定义的资源文件,然后使用诸如
    DialogBoxParam
    之类的函数从资源中创建一个对话框。
    这里不涉及C代码,只涉及一个资源文件4,您可以使用Visual Studio的资源编译器进行编译并链接到可执行文件。任何现代链接器,包括旧的TLINK,都可以链接资源文件


    1众所周知的
    注册类
    CreateWindowsEx
    GetMessage
    TranslateMessage
    DispatchMessage
    DefWindowProc
    API

    2 X64调用约定可能比 x86版本

    3您主要存储/加载值,有时您需要指针,有时您可以使事情变得更复杂 优雅的函数指针。您永远不需要特定的体系结构说明,这是 除了娱乐之外,使用汇编的主要原因

    这是一个简单的文本文件,格式非常简单。你可以用记事本自己编码 如果你在脑海中画出了一个很好的坐标,我就习惯了这样做,以避免使用VisualC++。

    < P>我没有在Windows 10中具体做过任何编程,所以这可能有点过时。p> 当您在Windows中构建GUI时,您最终会调用一组众所周知且主要是标准的API 1 按顺序,通常与非常基本的控制流类似于单分支ifs。 当然,这并不适用于所有应用程序,但适用于大多数应用程序

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

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

    答案

  • 我想不出任何理由不在汇编中构建GUI。事实上,我已经做了很多次了,而且我的速度已经和C语言一样快了。
    我想不出有什么好处,但很有趣。
    您可以在与 GUI的创建也可以用C语言完成

  • 这根本不是一个疯狂的想法,就我所知,WPF实际上就是这么做的。
    从零开始做这件事,虽然是一项非常有趣的运动,但不会