[英]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.