簡體   English   中英

從本地Visual C ++代碼調用ac#.dll

[英]Calling a c# .dll from native visual c++ code

我正在使用的系統包括:

  • 用最可能的VB或VC ++編寫的前端應用程序(不知道,不知道,也沒有資料來源)
  • 不受管理的VC ++ .dll
  • AC#.dll

應用程序調用第一個dll,第一個dll調用與第二個dll不同的方法。
為了使第一個dll能夠查看和調用C#代碼,我遵循了本指南: http : //support.microsoft.com/kb/828736
唯一的不同是,我不使用/ clr:OldSyntax進行編譯,如果我這樣做了,則更改其他相關的編譯選項會使第一個dll從應用程序錯誤地加載。

一切都能順利編譯; 整個安裝程序最初甚至還可以正常工作,但是在兩個dll中完全開發完我的代碼后,我現在在應用程序中遇到錯誤。 錯誤是:

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

並且在第一個dll中執行以下行時發生:

MyManagedInterfacePtr ptrName(__uuidof(MyManagedClass));

我嘗試復制完全正常的設置,但沒有成功。

關於我如何成功做到這一點的任何想法? 或替代地使兩個dll一起工作的其他方法?

提前致謝!

這是與RPC相關的低級COM錯誤。 這通常在進程外服務器中使用,但這聽起來不像您的設置。 如果您從另一個線程在COM接口上進行調用,也將使用它。 原因之一可能是,創建COM對象的線程被允許退出,調用CoUninitialize並拆除COM對象。 從另一個線程進行的后續調用將生成此錯誤。 錯誤地引用引用(經常調用Release)也可能導致這種情況。

通過仔細跟蹤哪些線程創建一個COM對象以及它們可以存活多長時間來解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM