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