我刚在我的应用程序中遇到问题,我需要获取 CreateWindowW
函数的静态地址。像这样:
&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
最佳答案
如果打开CreateWindow
documentation on MSDN并向下滚动,您将看到它已实现为CreateWindowEx
的包装器。如果打开CreateWindowEx doc并向下滚动,则会看到以下内容:
因此,它是在User32.dll
中实现的。