Я просто пытаюсь получить информацию о модуле на основе строки, которая вполне может быть чем-то вроде «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.
Теперь я попробовал множество шагов, таких как:
Going в Свойства проекта → Свойства конфигурации → Набор символов и настройки его Многобайтовые Набор символов, а не Unicode. Я видел, как это помогало другим людям, но это не помогло мне.
Кастинг szModule как
(LPCWSTR)szModule
. Это сделало программу успешной, однако она не работала так, как предполагалось.Использование 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 и меньше. Я хочу сделать это, поэтому мне не нужно писать WideCharToMultiByte каждый раз, когда мне нужно передать LPCWSTR. –