Я уже пробовал использовать wchar_t и цикл for для чтения памяти wchar с помощью wchar, и это сработало. Рабочий код:
int cl = 20;
std::wstring wstr;
wchar_t L;
for (int i = 0; i < cl; i++) {
ReadProcessMemory(ProcHandle, (unsigned char*)Address, &L, 2, NULL);
Address += 2;
wstr.push_back(L);
}
std::wcout << wstr << std::endl;
Теперь, когда я пытаюсь использовать std :: wstring и читать прямо в нем, он не работает по какой-либо причине.
int cl = 20;
std::wstring L;
L.resize(cl); // could use reserve?
ReadProcessMemory(ProcHandle, (unsigned char*)Address, &L, cl*2, NULL);
std::wcout << L << std::endl;
Я решил использовать (cl * 2)
в качестве размера, потому что wchar_t имеет размер 2 символа.
Я ожидал, что он напечатает wstring в wcout, но вместо этого он будет ошибаться чем-то похожим на Failed to read sequence
Примечание: я не могу использовать wchat_t [20], потому что позже я хочу, чтобы cl был динамическим.
Изменить: забыл сказать, что я на std c ++ 17
// could use reserve?
Нет. Резерв на самом деле не увеличивает размер вашей строки. Вы все равно будете писать за пределами вашей строки (даже если вы знаете, что выделенная память подходит для этого). Например, данные могут быть неправильно скопированы, если вы сделаете копиюL
. Насколько ему известно, размер по-прежнему будет равен 0, поэтому он попытается скопировать 0 символов. - person François Andrieux   schedule 30.08.2019