0

私は単純な show_window 関数を書き込もうとしましたが、ワイド文字を使用するものは D のどこにも例がありません。ナロー文字列を使用するウィンドウの作成を見つけて、それを書き直そうとすることしかできませんでした (私は悪い英語を知っています)。そのため、Unicode winapi バインディングを適切に登録しても失敗しています。

import core.runtime;
import core.sys.windows.windows;
import std.c.windows.windows;
pragma(lib, "gdi32.lib");
pragma(lib, "user32.lib");

struct WNDCLASSW { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCWSTR lpszMenuName; LPCWSTR lpszClassName; }

extern(Windows) HWND CreateWindowW(LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam );

extern(Windows)
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow) {
  HWND hWnd = CreateWindowW("wndClassName", 
   "window caption", WS_SYSMENU | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP, null, hInstance, null);
  return 0;
}

そしてそれは以下を生成します:

Error 42: Symbol Undefined _CreateWindowW@44
4

1 に答える 1

2

最新バージョンの Windows は CreateWindow() を実装していません。これは 1980 年代にさかのぼる古代の winapi 関数であり、CreateWindowEx() に置き換えられました。WinUser.h SDK ヘッダーでは、CreateWindowW は実際に CreateWindowExW() を呼び出すマクロであり、追加の dwExStyle 引数に 0 を渡します。

代わりに CreateWindowExW() を使用する必要があります。

于 2013-01-29T14:18:07.153 に答える