2013-06-12 37 views
6

denilen edilmemiştir.CoInitialize() C istisnalar ++

- Projem yapısı

İşte benim porblem olduğunu. Ben bir COM dll, C# ile geliştirilen MCLWrapper.dll var; MCLWrapper.dll çağırır bir yerel yerli C++ dll, ThorDetectorSwitch.dll var; Son olarak, ThorDetectorSwitch.dll adlı bir konsol uygulaması TDSTest.exe var. Temelde, böyle bir şey:

TDSTest.exe (C++ konsol) -> ThorDetectorSwitch.dll (C++ yerli) -> MCLWrapper.dll (C#)


Kod TDSTest.exe o yükler ThorDetectorSwitch.dll:

ThorDetectorSwitch::ThorDetectorSwitch() : _mcSwitch(__uuidof(MCLControlClass)) 
{ 
    _A = WstringToBSTR(L"A"); 
    _B = WstringToBSTR(L"B"); 
    _C = WstringToBSTR(L"C"); 
    _D = WstringToBSTR(L"D"); 

    _deviceDetected = FALSE; 
} 
ThorDetectorSwitch.cpp

yılında

HINSTANCE hInst = LoadLibrary(_T("C:\\TIS_Nick\\Hardware\\Devices\\ThorDetectorSwitch\\TDSTest\\TDSTest\\Debug\\Modules_Native\\ThorDetectorSwitch.dll")); 

Oluşturucu

kırılma noktası yukarıda ThorDetectorSwitch.dll yapıcısı ilk parantez vurur ama comip içinde

hr = CoCreateInstance(rclsid, pOuter, dwClsContext, __uuidof(IUnknown), reinterpret_cast<void**>(&pIUnknown)); 

için F10 (bir adım daha)

Bu atlar isabet eğer istisna hemen oluştu .h. İk sadece "CoInitialize çağrılmadı".

Bu amblemi günlerce düşünüyorum ve bir çözüm bulamıyorum. Buradaki herkes herhangi bir düşünceyi paylaşabilir mi? Gerçekten takdir ediyorum.

+4

Sana() '' Coınitialize çağırmak gerek. * Kaynak: "CoInitialize() çağrılmadı" hata iletisi çıldırdı "* –

+0

@LuchianGrigore Ben Reed denilen CoInitialize() çağırdı, ama başka bir sorun var. Benim yorumlarımı Reed'in gör. –

cevap

10

COM dll'niz Tek Kademeli Daire modunda olmanızı gerektirir. Kullanmadan önce CoInitialize numaralı telefonu aramanız gerekir.

sizin .exe Bu ekleyin:

CoInitialize(nullptr); // NULL if using older VC++ 

HINSTANCE hInst = LoadLibrary(_T("C:\\TIS_Nick\\... 
+0

Bunu nasıl yaparım? CoInitialize() öğesini nereye eklemeliyim? Ve kaç tane eklemem gerekiyor? Teşekkürler. –

+1

@NickXTsui Genellikle giriş noktasının ('main()') başlangıcına doğru koyarım ve sadece bir kez ararım. Bu * iş parçacığı * kurar. Ayrıca programınızın sonuna "CoUninitialize" de eklemek isteyebilirsiniz. –

+0

@NickXTsui Sadece '' TDSTest.exe', DLL –