簡短的問題:CXX0030:錯誤:表達式無法計算
爲什麼我看到這個在本地窗口爲我IWICImagingFactory對象,而在我的析構函數?
長解釋:
我創造我的CreateDeviceIndependentResources一個IWICImagingFactory對象()函數:
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(
CLSID_WICImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&mpWICFactory)
);
}
我已經在這之後檢查小時,它始終是S_OK。
然後在我CreateDeviceResources()函數我將指針傳遞到IWICImagingFactory對象中LoadBitmapFromFile()的調用:
if(SUCCEEDED(hr))
{
hr = LoadBitmapFromFile(
mpRenderTarget,
mpWICFactory,
L".\\background.png",
0,
0,
&mpBackgroundBitmap);
}
功能LoadBitmapFromFile正是因爲它出現在MSDN樣本。你可以看到這裏的大部分代碼:http://msdn.microsoft.com/en-us/library/dd756686%28v=VS.85%29.aspx
從LoadBitmapFromFile的返回碼()是S_OK。我現在有一個可以正常工作的ID2D1Bitmap對象。
我不使用WIC工廠爲別的。發生在我的析構函數的問題,當我嘗試SafeRelease()的WIC工廠:
SafeRelease(&mpWICFactory);
SafeRelease()定義爲:
template<class Interface>
inline void SafeRelease(Interface** ppInterfaceToRelease)
{
if(*ppInterfaceToRelease != NULL)
{
(*ppInterfaceToRelease)->Release();
(*ppInterfaceToRelease) = NULL;
}
}
雖然在析構函數,如果我擴大在mpWICFactory對象本地窗口,我看到「CXX0030:錯誤:表達式無法評估」錯誤。下面的截圖顯示了在調用WICFactory對象上的SafeRelease()之前的Locals窗口。
http://img21.imageshack.us/img21/9820/localsy.jpg
然後我得到一個錯誤:在的Program.exe 0x00d22395 未處理的異常:0000005:訪問衝突讀取位置0x6df128f0。
是什麼這個問題的原因是什麼?
編輯:這是一個完整的簡單的程序,證明了問題:
Test.h
#ifndef TEST_H
#define TEST_H
#include <Windows.h>
#include <wincodec.h>
#include <d2d1.h>
class Test
{
public:
IWICImagingFactory *mpWICFactory;
Test();
~Test();
HRESULT Init();
};
template<class Interface>
inline void SafeRelease(Interface** ppInterfaceToRelease)
{
if(*ppInterfaceToRelease != NULL)
{
(*ppInterfaceToRelease)->Release();
(*ppInterfaceToRelease) = NULL;
}
}
#endif
Test.cpp的
#include "Test.h"
Test::Test() : mpWICFactory(NULL)
{
}
Test::~Test()
{
SafeRelease(&mpWICFactory);
}
HRESULT Test::Init()
{
HRESULT hr = CoCreateInstance(
CLSID_WICImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&mpWICFactory)
);
return hr;
}
Main.cpp的
#include <Windows.h>
#include "Test.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance,
PSTR cmdLine, int showCmd)
{
if(SUCCEEDED(CoInitialize(NULL)))
{
Test app;
app.Init();
CoUninitialize();
}
return 0;
}
如何定義mpWICFactory? –
IWICImagingFactory * mpWICFactory; 我在構造函數初始值設定項列表中將它初始化爲NULL。 – user974967