2011-12-22 3 views
2

방금 ​​다음 코드 (windows xp sp3, vs2010)를 시도하고 LoadLibrary가 Null을 반환하는 것으로 보입니다.Null을 반환하는 LoadLibrary

#include "windows.h" 
#include "stdio.h" 

int main() { 
    HMODULE hNtdll; 
    hNtdll = LoadLibrary(LPCWSTR("ntdll.dll")); 
    printf("%08x\n", hNtdll); 
} 

출력은 00000000입니다. docs에 따르면 함수가 실패하면 NULL이 반환됩니다. GetLastError을 사용해 보았는데 오류 코드는 126 (0x7e, Error Mod Not Found)입니다.

이 문제를 어떻게 해결할 수 있습니까?

감사합니다.

답변

11

좁은 문자로 구성된 문자열 리터럴이 있습니다. LoadLibrary 호출에 와이드 문자가 예상됩니다. 타입 캐스팅은 하나에서 다른 타입으로 변환하는 방법이 아닙니다. 문자 폭 넓은 문자열을 얻을 수있는 L 접두사를 사용

LoadLibrary(L"ntdll.dll") 

유형 캐스팅은 char const* 진실하지 않은, 정말 wchar_t const*입니다 컴파일러를 알려줍니다. 컴파일러는 당신을 신뢰하고 어쨌든 LoadLibrary을 따라 포인터를 전달하지만, 넓은 문자열로 해석 될 때, 당신이 통과 한 것은 난센스입니다. 시스템의 파일 이름을 나타내지 않으므로 API가 모듈을 찾을 수 없다고 올바르게보고합니다.

2

LoadLibrary(_T("ntdll.dll")) 사용해야합니다. LPCWSTR은 char 기반 문자열 포인터를 widestring 포인터로 캐스트합니다.