Сбой Copymemory, когда std::string содержит более 5L символов
Привет
Я хочу скопировать строковые данные в общую память несколько раз с помощью функции CopyMemory(). Но этот вызов сохраняет только последние строковые данные и очищает существующие. Конечно, это соответствует дизайну. Но кто-нибудь даст мне знать, как скопировать строковые данные в общую память, используя любой другой альтернативный api, который не должен переопределять существующие данные.
У меня есть строка std::, в которой есть почти 5Lakh символов. Когда я пытаюсь скопировать эту строку в общую память она терпит крах
HANDLE hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, BUF_SIZE, wstring{ L"Local\\StringData_" + to_wstring(GetParentID()) }.data()); m_pStringBuf = (LPCTSTR)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE); CopyMemory((PVOID)m_pStringBuf, st.data(), (st.size()+1) * sizeof(TCHAR));
Вместо того чтобы копировать st.data() за один раз, я хочу скопировать данные, когда когда-либо получу их, чтобы строка содержала меньше данных и не происходило сбоя.
Любые предложения, пожалуйста.
Что я уже пробовал:
Попробовал сам и погуглил, но не нашел правильного ответа.
Что-то здесь не так, который рушится на copymemory, за()
std::string m_strData; std::string ch = "s"; for (long long i = 0; i < 500000; i++) { m_strData.append(ch); } long BUF_SIZE = (long)(sizeof(TCHAR) * (m_strData.size() + 1)); HANDLE hMapFilesize = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(long), { L"Local\\AECData_BufferSize_" }); long *m_pAECBufferSize = reinterpret_cast<long*>(MapViewOfFile(hMapFilesize, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(long))); CopyMemory((PVOID)m_pAECBufferSize, &BUF_SIZE, sizeof(long)); HANDLE hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, BUF_SIZE, { L"Local\\AECPropertiesAndLinkages_" }); LPTSTR m_pAECQuantityBuf = (LPTSTR)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE); CopyMemory((PVOID)m_pAECQuantityBuf, m_strData.data(), (m_strData.size() + 1) * sizeof(TCHAR));
Sampath579
Наконец - то я смог разобраться в этом вопросе самостоятельно. :)
KarstenK
Так что запишите его как ответ, чтобы решить вопросы и ответы.