Я только что встретил проблему в своем приложении, где мне нужно получить статический адрес функции CreateWindowW
. Так же, как это:Какой модуль реализует CreateWindowW в Windows?
&ShowWindow;
Однако при выполнении такой же трюк с CreateWindowW
, я получаю ошибку компилятора Identifier "CreateWindowW" is undefined
(это макрос). Я действительно не могу найти, где эта функция определена (какая DLL) и даже pinvoke.net не упоминает об этом.
На некоторых веб-сайтах есть упоминание о том, что это user32.dll
, но GetProcAddress
для моей функции внутри него возвращает нулевой указатель. Я потерян, какой модуль для Windows связан с этой функцией?
Если я пытаюсь подключить отладчик и трассировки вызов этой функции, Visual Studio делает «шаг за» это так я не могу понять, где вызов идет к ..
Моя сборка UNICODE. WINUSER.H текст я могу видеть:
#define CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y,\
nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
CreateWindowExA(0L, lpClassName, lpWindowName, dwStyle, x, y,\
nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
#define CreateWindowW(lpClassName, lpWindowName, dwStyle, x, y,\
nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
CreateWindowExW(0L, lpClassName, lpWindowName, dwStyle, x, y,\
nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
#ifdef UNICODE
#define CreateWindow CreateWindowW
#else
#define CreateWindow CreateWindowA
#endif // !UNICODE
'#define CreateWindowW (...) CreateWindowExW (...)' не отдает? –
Теперь это понятно, но не тогда, когда вы читаете страницу MSDN функции «CreateWindow», и вы уверены, что это не макрос. Макрос, возможно, не набрал аргументы, а страница MSDN определяет это как функцию с аргументами, которые имеют типы. Хотя нет упоминания, что это «макрос» или «обертка» (поскольку @VioletGiraffe назвал эту функцию собственными решениями), MSDN говорит (в конце статьи), она «реализована как вызов CreateWindowEx». Это не говорит мне ничего информативного и четко документирующего вопроса. Страница называется «Функция CreateWindow» в MSDN. – Croll
Из [CreateWindow] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms632679.aspx): * «CreateWindow реализован как вызов функции CreateWindowEx **, как показано ниже * *. "* В явном виде указано, что это макрос (в сопроводительном коде). Очевидно, проблема не в чтении документации. – IInspectable