我只是試圖根據一個字符串來獲取模塊信息,這個字符串可以很像「somefile.exe」。如何將char *傳遞給GetModuleHandle函數?
MODULEINFO GetModuleInfo(char *szModule)
{
MODULEINFO modinfo = {0};
HMODULE hModule = GetModuleHandle(szModule);
if(hModule == 0)
return modinfo;
GetModuleInformation(GetCurrentProcess(), hModule, &modinfo, sizeof(MODULEINFO));
return modinfo;
}
誤差參數類型「字符*」的是與類型「LPCWSTR」出現在的GetModuleHandle的參數不相容。現在
,我已經試過了許多措施,如:
將項目屬性→配置屬性→字符集並將其設置爲使用多字節字符集,而不是統一。我已經看到它幫助其他人,但它並沒有爲我做伎倆。
鑄造類似
(LPCWSTR)szModule
的sz模塊。這使得該程序的構建成功,但它沒有按預期工作。使用unicode通過用靜態
L"somefile.exe"
替換參數。但是,這很好地工作,不用說這很不實際。
我的問題是:怎樣才能讓GetModuleHandle(szModule)
編譯如果szModule
是char*
類型的?
我使用Visual Studio 2015,如果它有幫助的話。
你需要像在第二個例子中那樣施放它。如果'szModule'是一個'const char *'而不是它的工作?它看起來不像'GetModuleInfo'需要修改'szModule',所以它應該是一個安全的'const char *'。 – Tas
如何使用Unicode不太實用?這是在Win32中做事的首選方式。如果你堅持在你的代碼庫中使用char *字符串,你將需要使用WideCharToMultiByte/MultiByteToWideChar等轉換函數。 – gigaplex
@gigaplex我不是故意說使用unicode是不切實際的。我的意思是說那裏有一個靜態字符串是不實際的。最讓我困擾的是爲什麼將項目字符集設置爲**使用多字節字符集**不適用於我,但爲許多其他使用Visual Studio 2012及更少版本的人員工作。我想這樣做,所以每次我需要傳遞一個LPCWSTR時,我不必寫WideCharToMultiByte。 –