簡體   English   中英

COM應用程序引用的dll故障排除

[英]COM application referenced dlls troubleshooting

我有一個WPF應用程序,我將其作為DLL COM組件構建並使用installshieldLE安裝,但是在運行COM客戶端時,某些依賴的dll存在一些問題。

我的WPF dll引用了駐留在同一VS2012解決方案中的另外兩個C#dll(A和B)。

我的WPF dll已選中“注冊COM互操作注冊”選項,並提供了用於運行WPF GUI應用程序的COM接口。

我有一個C COM客戶端程序,用於測試WPF應用程序。 我遇到的問題是,我需要在客戶端程序的文件夾中包含一些dll_A引用的dll(這是第三方圖形包),以使應用程序成功運行。 我不必在本地客戶端目錄中包含dll_A或dll_B。

另外,COM服務器dll引用並包含在安裝中的其他(C)dll不需要出現在客戶端目錄中,因此這很難理解。

我假設這不是WPF問題,而僅僅是與其他引用程序集有關的com服務器安裝問題。

我已經在主要dll中輸出了一些調試消息,這些消息確認dll A&B以及主要的COM dll正在從安裝位置運行。 但是,當本地客戶端文件夾中缺少第三方dll時,我會進一步拋出異常。

有人可以幫我解決這個問題。 我可以從安裝位置成功運行客戶端程序,因此可以確定所有必需的程序集和dll都存在。

謝謝。

聽起來您遇到了與DLL加載路徑有關的問題。 客戶端應用程序可以加載您的COM DLL,但是即使通過與COM DLL相同的文件夾中存在的依賴關系,您的COM DLL也無法加載其自己的依賴關系(或依賴關系的依賴關系等)。 這個對嗎?

如果是這樣,我相信可以通過調用AddDllDirectory函數來解決此問題-只需在加載任何依賴項之前讓您的COM DLL調用此RemoveDllDirectory ,然后在完成后調用RemoveDllDirectory 有關更多信息,請參見LoadLibrary文檔的“備注”部分。

該問題是由使用.Net 4.0編譯的引用dll之一引起的,而其他問題是使用.Net 4.0客戶端編譯的。 使用.Net 4.0客戶端重新編譯解決了該問題。

當將應用程序作為已注冊的com組件執行,並且客戶端從其他位置執行時,似乎會出現問題。 如果將有問題的dll復制到客戶端目錄,則一切運行正常。

暫無
暫無

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

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