我正在创建自己的c ++ dll。我希望能够从该C ++ DLL中使用我的COM库。 这就是我使用普通exe的COM DLL的方式:
#import "MyLib.tlb"
using namespace MyLib;
int main(int argc, char* argv[])
{
CoInitialize(NULL);
ITestClassPtr testClass(__uuidof(TestClass));
long result = testClass->Add(20, 34);
std::cout << result;
std::cout << "\n" << std::endl;
system("pause");
CoUninitialize();
return EXIT_SUCCESS;
}
它运作良好。
我应该如何在DLL文件中使用该COM库(MyLib)?如何以及在何处初始化它?在哪里保留指向ITestClassPtr的指针?
我试过了,但它崩溃了:
#import "MyLib.tlb"
using namespace MyLib;
ITestClassPtr testClass;
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
CoInitialize(NULL);
testClass = new ITestClassPtr(__uuidof(TestClass));
break;
case DLL_PROCESS_DETACH:
CoUninitialize();
break;
case DLL_THREAD_ATTACH:
CoInitialize(NULL);
break;
case DLL_THREAD_DETACH:
CoUninitialize();
break;
default:
break;
}
return TRUE;
}