Я хочу написать несколько модульных тестов для моего COM-объекта с помощью googletest. К сожалению, я получаю исключение, когда CreateInstance
вызывается: 0xC0000005: Access violation reading location 0x00000000
.
Код в основном выглядит следующим образом:
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();
}
Я могу без проблем вызвать CreateInstance
в некоторых существующих (не тестовых) проектах. Я не совсем понимаю COM / ATL, поэтому мне сложно понять, почему я получаю это странное исключение.