Этот код отлично работает в профиле отладки, но не в профиле выпуска.
Код: Выделить всё
#include //for cout
#include //split + to_string
#include //MMF + GetModuleFileName
#define BUF_SIZE 256
HANDLE hMapFile;
LPCWSTR pBuf; //LPCSTR
LPCWSTR szName;
#include //pour utiliser _tcslen
bool init_error = false;
int get_TCHAR_length(std::string str)
{
size_t size = str.length();
TCHAR* wArr = new TCHAR[size + 1];
//wArr[size] = '\0';
return (_tcslen(wArr) * sizeof(TCHAR));
}
TCHAR* convert_string_to_TCHAR(std::string str)
{
size_t size = str.length();
TCHAR* wArr = new TCHAR[size + 1];
for (size_t i = 0; i < size; ++i)
wArr[i] = str[i];
wArr[size] = '\0';
return wArr;
}
std::string convert_wstring_to_string(std::wstring wstr)
{
std::string str(wstr.begin(), wstr.end());
return str;
}
std::string convert_LPCWSTR_to_string(LPCWSTR l)
{
std::wstring ws(l); //convert to wstring
std::string str = convert_wstring_to_string(ws); //convert to string
return str;
}
void MMF_write(LPCWSTR _pBuf, std::string str)
{
CopyMemory((PVOID)_pBuf, convert_string_to_TCHAR(str), get_TCHAR_length(str));
}
std::string MMF_read(LPCWSTR _pBuf)
{
return convert_LPCWSTR_to_string(_pBuf);
}
int main()
{
init_error = false;
std::string s = "xxxxxx_";
s = s + "454545" + "_mmf_" + "1";
std::wstring stemp = std::wstring(s.begin(), s.end());
szName = stemp.c_str();
//MMF
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
BUF_SIZE, // maximum object size (low-order DWORD)
szName); // name of mapping object
if (hMapFile == NULL)
{
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79878326/c-write-to-memory-mapped-file-and-read-different-result-in-debug-and-release[/url]
Мобильная версия