C++ MapViewOfFile fails
C++ MapViewOfFile fails
我正在尝试使用VS2010在Windows上对文件进行内存映射。我在 DLL 中执行此操作。DLL 的第一个实例可以很好地映射文件。同一进程中的第二个实例导致
*ppvData = ::MapViewOfFile( *phMapping, FILE_MAP_READ, 0, 0, 0 );
失败并显示错误"此命令没有足够的内存可用"。我不确定为什么会发生这种情况。
如果我映射 2 个不同的文件而不是两次相同的文件,则一切正常,所以我不信任"内存不足"错误消息。
谢谢。
hr = MapFile(sPath, &m_hVoiceData, &m_pVoiceData,wsErr );
HRESULT CTTSEngObj::MapFile( wstring uPath, // Value that contains file path
HANDLE * phMapping, // Pointer to file mapping handle
void ** ppvData, // Pointer to the data
wstring &uError)
{
HRESULT hr = S_OK;
CSpDynamicString dstrFilePath(uPath.c_str());
if ( SUCCEEDED( hr ) )
{
bool fWorked = false;
*phMapping = NULL;
*ppvData = NULL;
HANDLE hFile;
#ifdef _WIN32_WCE
hFile = CreateFileForMapping( dstrFilePath, GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL );
#else
hFile = CreateFile(CW2T(dstrFilePath), GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL );
#endif
if (hFile != INVALID_HANDLE_VALUE)
{
*phMapping = ::CreateFileMapping( hFile, NULL, PAGE_READONLY, 0, 0, NULL );
if (*phMapping)
{
*ppvData = ::MapViewOfFile( *phMapping, FILE_MAP_READ, 0, 0, 0 );
if (*ppvData)
{
fWorked = true;
}
else
{
uError=GetLastErrorStdStrW();
}
}
else
{
uError=L"mapfile: fm failed";
}
::CloseHandle( hFile );
}
else
{
uError=L"mapfile: invalidhandle";
}
if (!fWorked)
{
hr = HRESULT_FROM_WIN32(::GetLastError());
if (*phMapping)
{
::CloseHandle(*phMapping);
*phMapping = NULL;
}
}
}
else
{
uError=L"mapfile: dynstr";
}
return hr;
} /* CTTSEngObj::MapFile */
它是这样宣布的:
class ATL_NO_VTABLE CTTSEngObj :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CTTSEngObj, &CLSID_SampleTTSEngine>,
public ISpTTSEngine,
public ISpObjectWithToken
{
private:
CComPtr<ISpObjectToken> m_cpToken;
HANDLE m_hVoiceData;
void* m_pVoiceData;
您请求将整个文件映射到内存中。它有多大?未分配进程的地址空间很可能没有足够大的连续范围。
相关文章:
- 共享内存:MapViewOfFile 返回错误 5
- Travis-CI Complex Makefile fails
- OpenCV: fs.open fails
- 使用 MapViewOfFile 分配静态共享内存
- GetProcAddress fails
- NetUserGetInfo fails
- C++ - bind() fails
- MapViewOfFile 返回错误 5 (ERROR_ACCESS_DENIED)
- MS Detours - DetourAttach fails
- ld fails to find glfw3
- 发送结构时如何使用MapViewOffile
- Visual Studio 2017 .Net Core 2.0 Angular Publish Fails
- SHGetKnownFolderItem - fails on Wow64
- 随机读取使用MapViewOffile的文件
- IVssBackupComponents::InitializeForBackup fails
- 无法发布C 中的CreateFileMapping和MapViewOffile创建的共享内存
- strftime() fails on Raspberry Pi (Raspbian)
- CreateFileMapping,MapViewOfFile,处理泄漏的c++
- MapViewOfFile and VirtualLock
- C++ MapViewOfFile fails