2010-09-21 79 views
2

我一起工作的系統包括:調用C#的.dll ++代碼

  • 一個前端應用程序寫在最有可能的VB或者VC++(不知道,不要」噸,並且可以不具有用於它的源)
  • 非託管VC++的.dll
  • AC#.dll文件

應用程序調用第一DLL中,第一DLL調用從第二個不同的方法。
爲了使第1個DLL能夠看到和調用C#代碼,我遵循這個指南: http://support.microsoft.com/kb/828736
唯一的區別是,我不使用/ clr編譯:OldSyntax,如果我那麼做改變其他依賴編譯選項會使第一個dll從應用程序加載不正確。

一切順利編譯;整個安裝程序甚至在最初工作得很好,但是在完成兩個DLL的代碼完全開發之後,我現在在應用程序中出現錯誤。錯誤是:

運行時錯誤「-2147417848(80010108)」:
自動化錯誤
調用已經與其客戶端斷開連接的對象。

當以下行的第1個DLL執行情況:

MyManagedInterfacePtr ptrName(__uuidof(MyManagedClass)); 

我試圖重現一個完全工作的設置,但沒有成功。

任何關於如何設法做到這一點的想法? 或者在其他方法使兩個dll一起工作?

在此先感謝!

回答

1

這是一個低級別的COM錯誤,與RPC相關聯。這通常用於進程外服務器,但這聽起來不像你的設置。如果您從另一個線程的COM接口進行調用,也會使用它。一個可能的原因是創建COM對象的線程被允許退出,調用CoUninitialize並拆除COM對象。從另一個線程進行的後續調用會產生此錯誤。獲取引用計數錯誤(經常調用Release)可能也會導致此問題。

通過仔細追蹤哪些線程創建COM對象以及它們能夠存活多久來解決此問題。

+0

感謝您的回答,因爲對我來說,調試調用DLL的應用程序是不可能的,我最終將C#代碼重寫爲非託管C++。這花了我幾天,但最終一切正常。 – Spookyone 2010-10-07 16:21:37