2010-07-30 152 views
0

我正在寫一個C#程序,通過COM互操作與COM對象接口。註冊COM參考64位Windows 7機器

我有一個第三方程序,當我執行應用程序時,它自己註冊爲COM服務器。這在32位Windows Vista中運行良好,我可以與Interop進行交互。 (當您點擊「添加引用」時,Visual Studio的「COM」選項卡中將顯示該引用)

但是,執行完後,引用沒有顯示在我的64位Windows 7機器的「COM」應用。任何想法,爲什麼會發生?我實際上嘗試使用regsvr32.exe來手動註冊應用程序,但它也沒有工作(錯誤消息說「入口點DllRegisterServer找不到)

回答

1

只要它你不能使用它沒有出現在COM選項卡中regsvr32.exe工具用於DLL,但這聽起來像是一個EXE,如果它是一個DLL,那麼它需要註冊32位版本的regsvr32.exe,在C:\ WINDOWS \ SysWOW64中如果它是一個EXE,然後按正常方式得到它註冊自己是通過使用/ REGSERVER命令行選項運行它

Mumble.exe/RegServer添加

此外,如果這是一個您沒有64位代理/存根的DLL或EXE,那麼您將不得不強制您的應用以32位模式運行。項目+屬性,生成選項卡,平臺目標= x86。

如果一切都失敗了,你真的需要這個程序的供應商支持。當然,他們會有一個經過驗證可在64位操作系統上正常工作的更新。如果他們不在身邊,在虛擬機中運行它總是可能的。

+0

非常感謝Hans,這非常有幫助。我試圖註冊的文件實際上是.exe,難怪我無法做到這一點。我確實已經設置了Platform target = x86。 Mumble.exe在哪裏?我如何得到它? – mwong 2010-08-02 13:41:47

+0

我不能幫你找到.exe,你不知道嗎?這是您在OP中提到的第三方程序。 – 2010-08-02 13:49:50

+0

對不起,我可能誤解了你。我以爲你提到了一個名爲Mumble.exe的工具 - 這可能只是一個例子。當然,我會知道第三方程序的位置。 – mwong 2010-08-02 14:18:39

1

如果它是一個託管的DLL,那麼你可以嘗試使用RegAsm

REGASM AssemblyName.dll /tlb:AssemblyName.tlb 
0

你會發現這是很有幫助的,因爲我需要重新編譯和構建64位代理存根從C++ COM服務器我和它一直未能嘗試使用/ regserver註冊服務器時。這是來自miscrosoft的線程,幫助我解決了這個問題。基本上你需要使用這個來代替/ RegServerPerUser,但是如果你在上面的答案後遇到這種情況,請通過線程。

http://social.msdn.microsoft.com/Forums/en/vcprerelease/thread/11f01ceb-52a4-438f-b7ef-727ce7a3e191