我正在使用CMemFile::Write()在内存中写两行:

void CLISTCTRLDlg::Export(LPTSTR *pBlock)
{
 CMemFile outMem(32768);

 CString csHeader = _T("EmpId EmpName EmpAddress\n");
 outMem.Write(csHeader.GetBuffer(0), csHeader.GetLength());

 CString csInfo = _T("1 TestName TestAddress\n");
 outMem.Write(csInfo.GetBuffer(0), csInfo.GetLength());

 long lLen = outMem.GetLength() + 1;
 BYTE *mBlock = outMem.Detach();
 *pBlock = (LPTSTR) malloc(sizeof(char) * lLen);
 memcpy(*pBlock, mBlock, lLen-1);
 (*pBlock)[lLen -1] = 0;
 OutputDebugStringW(*pBlock);
 free(outMem);
}


输出窗口显示字符串“ EmpId EmpNam????????? ?????????”当OutputDebugStringW(* pBlock);语句被执行。

我不明白为什么数据会被截断。

此外,当语句free(outMem);时,系统将引发未处理的异常。被执行。

谁能指导我解决问题,让我知道我在哪里错了?

谢谢。

最佳答案

无需复杂的东西来存储:

CMemFile file;
CArchive archive(&file, CArchive::store);

CString csHeader = _T("EmpId EmpName EmpAddress\n");
archive << csHeader;

CString csInfo = _T("1 TestName TestAddress\n");
archve << csInfo;

archive.Close();


装载:

file.Seek(0, 0); // rewind the file
CArchive archive(&file, CArchive::load);

CString temp;
archive >> temp;


无需对内存使用memcpy或小提琴。

09-06 15:03