ファイルにデータを書き込むために、共有メモリ関数を使用しています。問題: 以下の関数を使用してファイルに 10MB のバッファーを書き込もうとすると、最初の反復でのみ書き込むことができ、2 回目の反復ではバッファーの次の部分をメモリに書き込むことができませんでした。何か提案があれば私を助けてください。または以下のコードに問題があります。私はこの部分だけをコントロールしています。CreateFileMapping を持つ他の部分を制御することはできません。
「dwFileOffsetLow」または「dwFileOffsetHigh」で変更する必要があるもの。2 回目の反復以降、"MapViewOfFile" は null を返します。MapViewOfFile の異なる範囲を繰り返し呼び出す必要があるため、入力を得た場所があります。しかし、どのように呼び出すか、何か助けはありますか?これに関する以前の質問。参考までに!
WriteBuffer 関数 i は次のように定義されています。
BOOL CWriter::Write(char* pMemName,char* pBinary,long lBuffSize)
{
long lUnitSize = MEM_UNIT_SIZE;
if( lBuffSize <= 0 && lUnitSize <=0 )
return FALSE;
//Open named file mapping object.
HANDLE hFileMMF = OpenFileMapping(FILE_MAP_WRITE,FALSE,pMemName);
if(hFileMMF == NULL)
{
DWORD dwErr = GetLastError();
return (FALSE);
}
int nCount = 0;
nCount = (int)(lBuffSize / lUnitSize) + 1;
for(int n =0; n<nCount; ++n)
{
DWORD dwFileOffsetHigh = 0;
DWORD dwFileOffsetLow = lUnitSize*n;
// Map view of a file mapping into the address space of a calling process.
LPVOID pViewMMFFile = MapViewOfFile(hFileMMF,
FILE_MAP_WRITE,
dwFileOffsetHigh,
dwFileOffsetLow,
MEM_UNIT_SIZE);
if( pViewMMFFile == NULL )
return (FALSE);
CMutex mutex (FALSE, _T("MIPSMMMutexWriter"));
CString strTemp;
strTemp.Format("%s",pBinary);
// Lock memory, shared amongst processes
mutex.Lock();
try
{
CopyMemory(pViewMMFFile,pBinary,lUnitSize); // write
}
catch(CException e)
{
DWORD dw = ::GetLastError();
TRACE1("%d",dw);
}
mutex.Unlock(); // Unlock shared memory
//Unmap mapped view of a file from the calling process's address space.
UnmapViewOfFile(pViewMMFFile);
}
return (TRUE);
}
Plsは、私がすべき修正があれば提案します。ありがとう。