1
googletestを使用してCOMオブジェクトの単体テストを書きたいとします。残念ながら、CreateInstance
が呼び出されたときに私は例外を受け取ります:0xC0000005: Access violation reading location 0x00000000
。googletestを使用してATLオブジェクトをテストしようとしたときに例外が発生しました
コードは基本的に次のようになります。私はいくつかの中に何の問題もなくCreateInstance
を呼び出すことができる午前
MyClass.h
class ATL_NO_VTABLE CMyClass
: public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CMyClass, &CLSID_MyClass>,
public IConnectionPointImpl<CMyClass, &IID_IMyClassListener>,
public IConnectionPointContainerImpl<CMyClass>,
public IDispatchImpl<MyComClass, &IID_MyComClass, &LIBID_MyLib, 1, 0>
{
...
}
Test.cppの
#include "stdafx.h"
#include "gtest/gtest.h"
#include "MyClass.h"
TEST(MyClassTest, IsCreated)
{
HRESULT hr(E_FAIL);
CComPtr<MyComClass> lMyObject;
hr = CMyClass::CreateInstance(&lMyObject);
EXPECT_EQ(S_OK, hr);
}
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
既存の(テストではない)プロジェクト。私は本当にCOM/ATLを理解していないので、私はなぜこの奇妙な例外を得ているのか分かりません。
アクセス違反の呼び出しスタック?クラスにはグローバルなATLモジュールクラスが必要な場合がありますが、テストプロジェクトでは初期化されていないままになることがあります。 –