Я пытаюсь встроить пользовательский TXT-файл в exe-файл win32, используя кодовые блоки (компилятор TDM-G CC) на машине win10 x64.
Используя метод, отвеченный In silico , в аналогичном вопросе переменная «буфер» показывает только первые 3 байта. Пример: файл Data.txt содержит: "HOLA MUNDO" (22 байта проверены в шестнадцатеричном редакторе)
Но когда я показываю переменную 'char * buffer' с помощью MessageBox (), он показывает только первые три байта DATA. txt: ÿþH
Вот мой код:
void LoadFileResource() {
char* data = NULL;
DWORD rcSize = 0;
TCHAR sResName[5] = _T("#107"); // ID from resource.h file for DATA.txt
TCHAR sRestype[8] = _T("DATAREG"); // custom typeID from .rc file for DATA.txt
HRSRC rc = ::FindResource(NULL, sResName, sRestype);
HGLOBAL rcData = ::LoadResource(NULL, rc);
rcSize = ::SizeofResource(NULL, rc); // Have value of 22, and DATA.txt have 22 bytes
data = static_cast<const char*>(::LockResource(rcData));
char* buffer = new char[rcSize+1];
::memcpy(buffer, data, rcSize);
buffer[rcSize+1] = 0; // NULL terminator, I think here is 0 for very LAST position of buffer
MessageBox(NULL, buffer, NULL, MB_OK); // Only show 3 first bytes from DATA.txt
delete[] buffer;
}
Также проверены ресурсы, скомпилированные в окончательном EXE-файле, и содержимое DATA.txt есть там "HOLA MUNDO" .
Как правильно манипулировать / показывать содержимое данных / буфера ??
Обновление: Даже используя другой режим преобразования для данных , отбрасывая 'new char []' и 'memcpy ()':
data = (char*)(::LockResource(rcData));
LPBYTE sData = (LPBYTE)data;
LPTSTR sXml = (LPTSTR)sData;
DWORD buffSize = strlen(sXml); // Result in 3, don't know why.
MessageBox(NULL, sXml, NULL, MB_OK); //Shows again only first 3 bytes of DATA.txt
Тот же результат ÿþH .