0
我正在写一个Win32 C++ DLL,它使用在C#中创建的COM对象(B.dll)。 这个DLL(A.dll)提供CMyComObject类,它创建一个COM对象并对其进行访问。 这是我的代码。在C++中使用COM对象dll
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();
..
}
然后,这是一个加载A.dll并访问COM对象的客户端程序。 这个程序创建了几个线程,这些线程同时加载A.dll并创建一个COM对象。
在这种情况下,这是正确的使用CoInitialize()函数还是应该使用CoINITializeEx()函数与COINIT_MULTITHREADED参数? 或者我做了什么错误? (我通过命令“reg_asm.exe B.dll B.tlb/codebase”注册B.dll)
对不起,我的英语很差。
谢谢。
在这个问题中提供的信息刚好足以给出一个危险*不准确的答案,并且可能*正确的答案。您打算如何访问这些COM对象以及他们的注册声明是什么(公寓,免费等)也是等式的一部分。而且,fyi CoInit不是一件物品;它的每个线程*。原因和方法太牵涉到这里的评论。我强烈建议一本关于COM编程的好书/教程,其中有许多*。 – WhozCraig 2015-02-10 05:32:00