File io 在CFile::Open方法调用上获取错误\u共享\u查看错误

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 {

我在程序开始时使用以下代码加载png图标文件:

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))