2012-07-12 72 views
0

我目前在Silverlight中使用了一些COM dll,並且遇到了一個奇怪的問題。我創建了兩個正在使用的.NET COM dll,兩者都通過DllImport引用其他dll。他們工作得很好。Silverlight COM路徑問題

然後我添加了第三個COM DLL到項目中。這個也通過DllImport引用其他dll。一旦我創造了另外兩個休息時間。他們會拋出錯誤,指出他們正在使用的其他dll無法找到。然而,第三個DLL工作正常。

這是我如何創建它們

AutomationFactory.CreateObject("Com1"); 
AutomationFactory.CreateObject("Com2"); 
AutomationFactory.CreateObject("Com3"); 

再次,如果我只是使用COM1和COM2他們的工作完全正常。如果我添加Com3,它可以正常工作,但其他兩個不能找到它們的本地dll。

我甚至沒有在Com3上調用任何函數,只是創建它,其他人停止工作。

任何想法?你認爲這可能是本地的dll嗎?我不明白第三者如何工作,但其他人不這樣做,你會認爲他們會停止工作,如果這是本地的dll破壞某些東西。

+0

你在做什麼來確保可以找到這些本機DLL?如果沒有,那麼第三個可以做一些改變Windows使用的搜索策略的事情,包括更改默認工作目錄或更改PATH環境變量。 – 2012-07-12 01:28:24

+0

這就是我在想什麼,但我現在很喜歡COM的東西。我只是將本機dll與註冊的COM dll放在同一個目錄中。這工作得很好,直到第三個COM DLL。我不知道如何用COM對象處理工作目錄。有沒有辦法可以更詳細地瞭解DllImport?我只是試圖給出完整的路徑作爲名稱,它可以找到它。 – thecaptain0220 2012-07-12 01:56:45

+0

我也嘗試刪除System32中的本機DLL,但它仍然無法正常工作。 – thecaptain0220 2012-07-12 02:04:40

回答

0

我想出了一種方法來使它工作。我仍然不是100%確定爲什麼需要這樣做。

如果我使用Directory.SetCurrentDirectory將當前目錄設置爲具有本機dll的目錄,它將工作。

似乎Com3並沒有改變目錄,但由於某些原因,它導致其他COM dll在當前工作目錄中查找,而不是在他們的註冊位置。