4

您好我正在尝试在 D 中打开一个带有 win32 的窗口,但我遇到了一个小问题。当我调用 CreateWindowA 时程序崩溃。

这是我的代码:

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

和:

this.classeFenetre.lpszClassName = toStringz("classeF");
this.hInstance = GetModuleHandleA(null);

string title = "test";

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

进程以 -1073740791 状态终止

在代码::块上。

4

3 回答 3

11

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

您显示的呼叫看起来不错。但是您没有向我们展示课程注册码,更重要的是,WndProc您注册了。我不确定你是如何在 D 中做到这一点的,但你WndProc需要声明__stdcall,以便它与 Windows 假定的调用约定相匹配。这是一个常见问题,会导致CreateWindow.

于 2011-10-03T13:46:04.427 回答
1

是的,这就是问题所在:

我没有像你在 D 中那样将 WndProc 声明为 __stdcall

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

谢谢你的帮助。

于 2011-10-04T07:42:36.770 回答
0

我建议使用 gtkD 或 QTD 而不是 Win32。这两个小部件库成熟而强大,但使用起来非常简单。你也有跨平台的支持。

于 2011-10-07T09:37:40.440 回答