Winapi 如何使用win32在D中创建Windows?

Winapi 如何使用win32在D中创建Windows?,winapi,d,win32gui,Winapi,D,Win32gui,你好,我正试图用win32在D中打开一个窗口,我有一个小问题。当我调用CreateWindowA时,程序崩溃 这是我的密码: this.fenetrePrincipale = CreateWindowA(this.classeFenetre.lpszClassName, toStringz(title), WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, null, null, this.hInstance, null); 与: 及 当我启动exe时,程序崩溃,我得到:

你好,我正试图用win32在D中打开一个窗口,我有一个小问题。当我调用CreateWindowA时,程序崩溃

这是我的密码:

this.fenetrePrincipale = CreateWindowA(this.classeFenetre.lpszClassName, toStringz(title), WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, null, null, this.hInstance, null);
与:

当我启动exe时,程序崩溃,我得到:

进程已终止,状态为-1073740791


在code::blocks上。

错误代码-1073740791(或0xc0000409)是由堆栈缓冲区溢出(不是溢出,如堆栈耗尽,而是写入堆栈中不应该写入的位置)引起的


您显示的通话看起来正常。但是你没有给我们看班级注册码,更重要的是,你注册的
WndProc
。我不确定您是如何在D中执行此操作的,但是您的
WndProc
需要声明
\uu stdcall
,以便它与Windows假定的调用约定相匹配。这是一个常见的问题,会导致
CreateWindow上的崩溃

是的,就是这个问题:

我没有宣布WndProc为uu stdcall 在D中,你这样做的方式是

extern (Windows) int windowRuntime(HWND window, UINT message, WPARAM wParam, LPARAM lParam)

谢谢你的帮助。

我建议用gtkD或QTD代替Win32。这两个小部件库成熟且功能强大,但使用非常简单。您还可以获得跨平台支持。

注意,这不是一个论坛,而是一个问答网站,因此您发布了一个“答案”。如果要对答案进行评论,请单击其下方的“评论”按钮。如果答案令人满意,请单击复选标记接受。至于这个“答案”,你应该删除它。欢迎事实上,我的目标是从无到有地创建一个2D API。我不想创建像QT或GTK这样的专业人员,更像sdl。为什么?重新发明轮子值得吗?在本例中,还有一些其他GUI工具包,尽管它们还不成熟,但完全是用D编写的。您可以从它们的源代码中学习。MSDN文档非常有价值。
string title = "test";
extern (Windows) int windowRuntime(HWND window, UINT message, WPARAM wParam, LPARAM lParam)