строка — символы C ++, хранящиеся в LPCSTR .. сломаны?

LPCSTR dllPath = ExePath().append("\\").append(DEF_INJECT_DLL).c_str();
DWORD dwBufSize = (DWORD)(strlen(dllPath) + 1) * sizeof(LPCSTR);

/* test */

char tbuf[1024]= {0,};
sprintf_s(tbuf, "dllPath : %s\r\ndwBufSize : %d", dllPath, dwBufSize);
MessageBoxA(NULL, tbuf, "TEST", MB_OK);

часть кода, чтобы ввести мою DLL.

ExePath() это функция, чтобы получить AbsolutePath из std::string тип данных с использованием GetModuleFileNameA API и так далее.

DEF_INJECT_DLL определяется #define "MyDll.dll"

Но когда я запускаю этот код, он показывает мне разбитые строки ….

введите описание изображения здесь

И когда я меняю MessageBoxA к этому:

MessageBoxA(NULL,
ExePath().append("\\").append(DEF_INJECT_DLL).c_str(),
"TEST",
MB_OK);

введите описание изображения здесь

это показывает правильно?

Также я попробовал таким образом:

MessageBoxA(NULL,dllPath, "TEST", MB_OK);

но это показывает мне как первый скриншот.

В чем проблема?

0

Решение

Проблема в этой строке:

LPCSTR dllPath = ExePath().append("\\").append(DEF_INJECT_DLL).c_str();

здесь вы звоните ExePath(), который возвращает std::string Например, измените его и, наконец, вызовите c_str() получить буфер необработанных данных.

Однако возвращаемое значение является временным объектом. После этой строки возвращенный std::string удаляется и будет очищать его память. Поэтому адрес где dllPath указывает на больше не действует!

Вы можете сохранить возвращаемое значение в локальном экземпляре, например,

std::string str = ExePath().append("\\").append(DEF_INJECT_DLL);
LPCSTR dllPath = str.c_str();
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]