2011-01-19 63 views
4

我想從.NET服務中使用第三方COM DLL(我不相信它是一個.NET組件),但沒有註冊COM DLL,但我正在到目前爲止沒有運氣。在.NET應用程序中使用免費的註冊com

我已經從這裏複製清單文件(http://stackoverflow.com/questions/465882/generate-manifest-files-for-registration-free-com)用作起點(我生成了使用引用的mt.exe/regsvr42.exe的COM DLL清單)。但我得到的是以下錯誤:

異常:System.InvalidCastException 消息:無法將類型爲'LOGICLib.LogicClass'的COM對象轉換爲接口類型爲'LOGICLib.ILogic'。此操作失敗,因爲IID爲「{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAA3E8FB4}」的接口的COM組件上的QueryInterface調用由於以下錯誤而失敗:沒有此類接口支持(異常來自HRESULT:0x80004002(E_NOINTERFACE)) 。 來源:Interop.LOGICLib 在LOGICLib.LogicSecuredClass.Connect(字符串IP,UINT16值,的Int32 &結果) 在My.Server.MyAssembly.Loader.Connect()中d:\ MyProject的\源\服務器\ MyAssembly程序\裝載機.cs:line 461

應用程序清單以啓動服務的exe命名 - 我也嘗試在調用COM DLL的程序集後命名它。我試過從命令行開始並通過Visual Studio的調試器。我也嘗試使用由第三方提供的Interop文件並生成我自己的文件。

(注意 - 我只在Windows XP下測試,到目前爲止)

我花了兩天時間在這現在並沒有進步可言。任何想法我可能錯過了?

+0

愚蠢的問題。 LogicClass實際上是否實施了ILogic? – 2011-01-19 14:02:24

+0

我相信如此。正如我已經回覆到DarkBobG,如果DLL註冊regsvr32,它都可以正常工作。 – cheesemp 2011-01-19 14:15:30

+0

查看下面接受的答案 - 其固定,但並不簡單。謝謝各位的幫助。 – cheesemp 2011-01-21 11:15:05

回答

3

The application manifest is named after the exe that starts the service

是的,這是行不通的。 Windows始終在EXE本身中查找清單,作爲非託管資源嵌入。只有當它在那裏找不到一個時,它纔會在磁盤上尋找一個.manifest文件。問題是,使用VS2008構建的託管程序已經具有清單。默認的只說「我只是Vista」。

您可以通過使用File + Open + File並選擇您的EXE來驗證這一點。打開RT_MANIFEST節點並雙擊資源1.如果您沒有看到您的免註冊的COM清單條目,那麼它將不起作用。

要修復,使用Project + Add New Item並選擇Application Manifest File項目模板。你會得到樣板清單,複製並粘貼你的regfree COM條目。

-1

那麼,從例外情況來看,當您嘗試將類型爲LogicClass的對象轉換爲接口類型爲ILogic時,會出現轉換錯誤。看起來像LogicClass沒有實現ILogic。

你沒有提供DLL或你得到它的地方,所以你最好打賭是看你正在使用的庫的文檔。只是一個瘋狂的猜測,但它看起來像你正在實施它不正確。

相關問題