Аргумент типа char* несовместим с параметром типа tchar*
DWORD gamebaseadress1 = GetModuleBaseAddress(_T(gamemmodule1), pID);
ошибка в (_T
Ответы (1 шт):
Давайте посмотрим, а что же делает этот _T(...). Для этого возьмем подчищенный код с библиотеки
#ifdef _UNICODE
#define _T(c) L##c
#define TEXT(c) L##c
#else
#define _T(c) c
#define TEXT(c) c
#endif
То есть, грубо говоря, если определен макрос _UNICODE, то _T(word) заменяется на Lword. Странно, да? нет, просто в плюсах есть конструкция L"text", для того, что бы подсказать компилятору, что текст в кавычках это не const char*, const wchar_t*. Что же будет, если туда подсунуть просто какую то переменную типа char*? а ничего хорошего. При компиляции с отключенным _UNICODE, оно будет работать, а с включенным (это 99% современного кода), будет ошибка.
Как исправлять?
если тип у gamemmodule1 wchar_t*, то можно просто написать
DWORD gamebaseadress1 = GetModuleBaseAddress(gamemmodule1, pID);
или даже так (как по мне, то если не нужно заморачиваться на старый код без поддержки юникода, то это самый простой вариант):
DWORD gamebaseadress1 = GetModuleBaseAddressW(gamemmodule1, pID);
Если же тип char*, то можно по быстрому так
DWORD gamebaseadress1 = GetModuleBaseAddressA(gamemmodule1, pID);
Но лучше имя модуля сразу получать в wchar_t*. или преобразовать.
А ещё лучше, хотя это и сложно, поддержать тип TCHAR* - это такой тип, который также зависит от _UNICODE и разворачивается в char* или wchar_t* или заморочится с конвертированием, но это нудно. Проще сразу в юникод стиле делать.
На почитать https://habr.com/ru/post/164193/