Je vous écris deux lignes en mémoire à l'aide CMemFile::Write()
:Impossible de copier les données présentes dans CMemFile en utilisant CMemFile :: Détacher()
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);
}
La fenêtre de sortie affiche la chaîne « EMPID EmpNam ?????? ?? ????????? " lorsque le OutputDebugStringW (* pBlock); L'instruction est exécutée.
Je ne comprends pas pourquoi les données sont tronquées. En outre, le système lève une exception non gérée lorsque l'instruction est libre (outMem); est exécuté.
Quelqu'un peut-il me guider s'il vous plaît à la solution et laissez-moi savoir où je me trompe?
Merci.
Je l'ai essayé mais j'ai obtenu la même exception. – user196614
Je crois que c'est parce que '(* pBlock) [lLen -1] = 0;' doit également être mis à jour pour gérer le décalage de taille tchar '(* pBlock) [lLen * sizeof (TCHAR)] = 0;' – Ruddy
@ Ruddy: Je ne pense pas ... 'pBlock' est de type' TCHAR ** ', donc un index appliqué à' (* bBlock) 'sera un index dans un tableau de' TCHAR's. Notez que s'il s'agissait en fait d'un tableau d'octets, vous devez tout d'abord le convertir en un tableau TCHAR afin de définir un terminateur NULL à deux octets! @unknown: J'ai manqué cette nuit dernière, mais ... Vous êtes 'libre()' ne pas avoir le bon objet! Voir mon edit ... – Shog9