[英]Using COM Object in C++ dll
I am writing a Win32 C++ DLL that uses the COM object(B.dll) which is made in C#. 我正在写一个Win32 C ++ DLL,它使用C#制作的COM对象(B.dll)。 This dll(A.dll) provides CMyComObject class which creates a COM object and access to it.
此dll(A.dll)提供CMyComObject类,该类创建一个COM对象并对其进行访问。 Here is my code.
这是我的代码。
void CMyComObject::CMyComObject()
{
HRESULT result = CoInitialize(NULL);
...
result = CoCreateInstance(CLSID_COMDLL, NULL, CLSCTX_INPROC_SERVER, IID_COMDLL, reinterpret_cast<void**>(&MyComObject));
}
void CMyComObject::~CMyComObject()
{
..
CoUninitialize();
..
}
And then, here is a client program that loads A.dll and access to the COM object. 然后,这是一个加载A.dll并访问COM对象的客户端程序。 This program creates several threads which load A.dll and create a COM object concurrently.
该程序将创建几个线程,这些线程将加载A.dll并同时创建一个COM对象。
In this case, Is this correct to use CoInitialize() function or Should I use CoInitializeEx() function with COINIT_MULTITHREADED parameter? 在这种情况下,使用CoInitialize()函数正确吗?还是应该将CoInitializeEx()函数与COINIT_MULTITHREADED参数一起使用? Or Is there any mistake I did?
还是我有任何错误? (I registered B.dll by commanding "reg_asm.exe B.dll B.tlb /codebase")
(我通过命令“ reg_asm.exe B.dll B.tlb / codebase”注册了B.dll)
Sorry for my poor English. 对不起,我的英语不好。
Thanks. 谢谢。
You are supposed to use CoInitialize[Ex]
/ CoUninitialize
before and after any COM activity on that thread, and your choice between CoInitialize
and CoInitializeEx
with specific parameters depends on whether you prefer STA or MTA mode for your thread. 您应该在该线程上的任何COM活动之前和之后使用
CoInitialize[Ex]
/ CoUninitialize
,并且在具有特定参数的CoInitialize
和CoInitializeEx
之间进行选择取决于您是为线程选择STA还是MTA模式。
Having said that, your initialization: 话虽如此,您的初始化:
Summing it all once again, your initialization: 再次汇总所有内容,进行初始化:
CoInitialize
and CoUninitialize
calls out of constructor and associate it with thread code CoInitialize
和CoUninitialize
调用移出构造函数并将其与线程代码关联 CoUninitialize
call, including releasing your MyComObject
pointer. CoUninitialize
调用之前关闭所有COM活动,包括释放MyComObject
指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.