Почему конвертируется в LPVOID? Потому что ты сказал это. Давайте обрежем это и заметим, что ошибка остается:
int main() {
void* x = "characters";
}
ошибка C2440: «инициализация»: невозможно преобразовать из «const char [11]» в «void *»
Я хочу быть ясным, я просто отвечаю на вопрос. Я не претендую на остальную часть кода.
Обычно приведение к старому стилю считается плохой практикой, но для функции старого стиля, которая ожидает void *, go для нее:
#include <Windows.h>
int main() {
const char *path = "MessageBoxDLL.dll";
HANDLE h = OpenProcess(PROCESS_CREATE_THREAD, FALSE, 34808); //Creating a remote thread
CreateRemoteThread(h, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, (LPVOID)path, 0, NULL);
}
Поскольку функция не выполняет никакой проверки типов, вы сами можете передать ей правильные аргументы. Документация и пример кода должны помочь. Преобразование в void * имеет смысл для функции потока ОС, поскольку ОС не знает, что вы собираетесь передать.