我正在使用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或小提琴。