[英]Error when calling a .net dll from Com Visible dll using javascript
我正在開發Windows 7小工具,正在創建Activex對象並加載程序集。我正在遵循代碼項目 (GadgetInterop)此處提到的方法。 該小工具的任務之一是與Facebook交互。
這就是我的引用方式:Javascript創建了一個GadgetBuilder對象。 從這里加載我的庫。 說“ MyLibrary.dll”。
如果我從ASP.NET表單測試我的代碼,則可以完美運行。 但是,當我嘗試通過使用javascript從html頁面運行它時,出現以下錯誤:
無法加載文件或程序集'facebook,Version = 2.1.3654.38113,Culture = neutral,PublicKeyToken = null'或其依賴項之一。 該系統找不到指定的文件。
我確認dll與“ MyLibrary.dll”位於同一文件夾中。
您無需在桌面小工具中為.net代碼使用基於反射的程序集加載器,您可以使用類ID等將程序集編寫為com可見。 本文提供了一個使用.net來實現目標的示例正在嘗試沒有“適配器”的情況。
話雖這么說,基於Activex的桌面小工具存在各種問題,您應該注意:
因此,實際上,盡管您可以在不進行反射的情況下進行操作,但是使用反射可能是更好的選擇,因為您可以將適配器程序集復制到備用文件夾,使用它加載當前程序集,然后在小工具關閉或使用完該組件時將其卸載。 這消除了第一個無法卸載小工具的問題,因為托管程序集位於另一個文件夾中,並且無論如何關閉小工具時,都會卸載反射的程序集。
facebook.dll之所以無法加載,是因為您使用的加載器無法正確解析依賴項(由於找不到位置,因此無法找到文件)。 歡迎您嘗試我們稱為PluginLoader的基於反射的程序集加載器,看看是否可行。 我們尚未發布它的正式版本,但我們打算使其廣泛可用,並建議所有開發人員使用它來嘗試消除ActiveX和Windows桌面小工具的問題。 由於我們尚未正式發布它,因此您必須安裝我們的小工具“ 拍賣側邊欄工具” ,該工具將安裝插件加載程序,以供以下代碼使用:
var plLoader = new ActiveXObject("Sidebar.PluginLoader");
var myLibrary = plLoader.LoadAssembly(classToLoad,
System.Gadget.path+"\\path\\to\\MyLibrary.dll");
myLibrary.GetFaceBookFeeds();
要加載的類是需要以Namespace.Class格式(即MyLibrary.MyClass )加載的類。 我們專門對其進行了編碼,以正確解決任何依賴關系,因此它應該可以為您正常工作。 如果它對您有用,則歡迎將其包含在小工具中。 您需要做的只是AuctionSidebarTool文件夾中的PluginLoader.js和PluginLoader.dll文件,但是您需要編輯PluginLoader.js文件以刪除引用我們裝配體的零件(從第110行開始)。 如果將其包含在項目中,它將檢查是否存在現有的PluginLoader.dll,如果失敗,則將其復制到本地AppData中的Windows Sidebar文件夾中,進行注冊並為AddInLoader
對象提供LoadAssembly
和UnloadAssembly
方法。 如果您需要其他幫助,請在評論中告訴我。
希望能有所幫助。 到目前為止,這可能是我寫的最長的答案:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.