2011-12-22 23 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ポインタにキャストするだけです。