COMWrapper g_COMWrapper;
// dll entry point
extern "C" BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
extern "C" void Test()
{
if( g_COMWrapper.GetPtr()->GetInterfacePtr() != NULL)
{
//TODO
}
}
这段代码是一个com客户端,是一个DLL,COMWrapper 是一个class,封装了一个COM指针,理论上这样的写法没有错误,但是当一个exe程序使用这个dll的时候,却不能加载这个DLL,在CreateInstance函数中死掉了
如果修改成下面这样,就可以解决问题了 (把COMWrapper 作为local变量就可以了)
- COMWrapper g_COMWrapper;
- // dll entry point
- extern "C" BOOL APIENTRY DllMain( HMODULE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved
- )
- {
- return TRUE;
- }
- extern "C" void Test()
- {
- COMWrapper _COMWrapper;
- if( _COMWrapper.GetPtr()->GetInterfacePtr() != NULL)
- {
- //TODO
- }
- }