Ошибка 42: Symbol Undefined _CreateWindowW@44 при попытке зарегистрировать привязку несуществующей функции Windows

Я пытаюсь написать простую функцию 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

person rsk82    schedule 29.01.2013    source источник


Ответы (1)


Современные версии Windows не реализуют функцию CreateWindow(). Это древняя функция winapi, которая восходит к 1980-м годам и была заменена функцией CreateWindowEx(). В заголовке WinUser.h SDK CreateWindowW — это макрос, который фактически вызывает CreateWindowExW(), передавая 0 в качестве дополнительного аргумента dwExStyle.

Вместо этого вы должны использовать CreateWindowExW().

person Hans Passant    schedule 29.01.2013