2017-01-13 1 views
1

방금 ​​내 응용 프로그램에서 문제가 발생했습니다. 정적 주소 인 CreateWindowW이 필요합니다. 그냥 같이 : CreateWindowW와 같은 트릭을 수행 할 때Windows에서 CreateWindowW를 구현하는 모듈은 무엇입니까?

&ShowWindow; 

그러나, 내가 컴파일러 오류를 얻을Identifier "CreateWindowW" is undefined (이 매크로이다). 사실이 함수가 정의 된 곳 (DLL)을 찾을 수 없으며 심지어 pinvoke.net에도이 기능이 언급되어 있지 않습니다.

일부 웹 사이트에는 user32.dll이라는 언급이 있지만 내 함수에 GetProcAddress은 null 포인터를 반환합니다. 내가 잃어버린, Windows에서 어떤 모듈이이 기능과 연결되어 있습니까? 난이 기능에 디버거와 추적 전화 연결을 시도하면 통화 ..

내 빌드가 유니 코드가있다 어디로

는 비주얼 스튜디오는 그래서 난 이해할 수 없다 "이상의 단계"합니다. 내가을 볼 수 있습니다 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 
+2

'#define CreateWindowW (...) CreateWindowExW (...)'는 그것을주지 않았습니까? –

+0

이제는 "CreateWindow"함수의 MSDN 페이지를 읽고 매크로가 아닌지 확실합니다. 매크로는 형식화 된 인수를 갖지 않을 수 있으며, MSDN 페이지에서는 형식이있는 인수를 함수로 정의합니다. @VioletGiraffe가 자신의 결정에이 함수를 호출 한 것처럼 "매크로"또는 "래퍼"라는 언급이 없지만 MSDN에서는 (기사 마지막 부분에서) CreateWindowEx에 대한 호출로 구현됩니다. 이것은 유익하고 명확한 문서화 문제를 말해주지 않습니다. 이 페이지는 MSDN에서 "CreateWindow function"으로 제목이 지정됩니다. – Croll

+0

[CreateWindow] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms632679.aspx)에서 * : "CreateWindow는 아래 그림과 같이 CreateWindowEx 함수 **에 대한 호출로 구현됩니다. *. "* 명시 적으로 해당 매크로가 매크로임을 나타냅니다 (함께 제공되는 코드에서). 분명히 문서를 읽지 않는 문제. – IInspectable

답변

4

CreateWindowdocumentation on MSDN을 열고 아래로 스크롤하면 CreateWindowEx 주위의 래퍼로 구현된다는 것을 알 수 있습니다. 당신이 CreateWindowEx doc을 열고 아래로 스크롤하는 경우, 당신은이를 볼 수 있습니다 :

image

그래서이 User32.dll에 구현 된 것입니다.

6

CreateWindowExWuser32.dll으로 수출되고 있습니다. 설명서를 확인할 수 있습니다. 또는 예를 들어 내보내기를 통해 확인할 수 있습니다. Microsoft의 dumpbin 도구

 
> dumpbin /exports c:\windows\system32\user32.dll | find /i "CreateWindow" 

     1618 6D 0000A230 CreateWindowExA 
     1619 6E 000107B8 CreateWindowExW 
     1620 6F 00041530 CreateWindowStationA 
     1621 70 000014D0 CreateWindowStationW 

CreateWindowWits documentation에 따른 매크로로서 구현 얇은 래퍼 : 아래와 같이

CreateWindowCreateWindowEx 함수 호출로서 구현된다.

#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 

또한 예에서 확인 할 수 있습니다 “ Visual Studio의 ” 정의로 이동하십시오.