我只是试图根据一个字符串来获取模块信息,这个字符串可以很像“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。 –