File io 在CFile::Open方法调用上获取错误\u共享\u查看错误
我在程序开始时使用以下代码加载png图标文件:File io 在CFile::Open方法调用上获取错误\u共享\u查看错误,file-io,bitmap,gdi+,File Io,Bitmap,Gdi+,我在程序开始时使用以下代码加载png图标文件: if (NULL == m_pImage) { Bitmap *pImage = new Bitmap(T2W(filePath)); if (size == kSmallIconSize) { m_pImage = static_cast<Bitmap *>(pImage->GetThumbnailImage(size, size)); } else {
if (NULL == m_pImage) {
Bitmap *pImage = new Bitmap(T2W(filePath));
if (size == kSmallIconSize) {
m_pImage = static_cast<Bitmap *>(pImage->GetThumbnailImage(size, size));
} else {
m_pImage = pImage;
}
if (m_pImage->GetLastStatus() == Ok)
m_resID = index;
else
return FALSE;
}
return TRUE;
但是它无法打开文件,并且GetLastError()
返回32,这意味着
错误\u共享\u冲突
我怎样才能解决这个问题
更新:
为了确保是“位图加载”代码导致了错误,我在这之后立即尝试了CFile::Open并确认了它
为什么Bitmap::Bitmap(WCHAR*pFilePath)
不共享文件或在加载后释放文件?来自:
以及解决办法:
您的
pImage
变量尚未解除分配,因此该文件仍在使用中
尝试使用CFile::SharedInOne
标志打开文件:
if (TRUE == file.Open(filePath, CFile::modeRead | CFile::shareDenyNone))
@user2432627您的问题是“为什么位图::位图(WCHAR*pFilePath)不共享文件,或者在加载后不让它运行…”,这就是我的答案。
if (TRUE == file.Open(filePath, CFile::modeRead | CFile::shareDenyNone))