2017-03-03 135 views
3

這個(舊)COM DLL似乎沒有64位版本的tlbinf32.dll,用於提取COM組件的信息。 (見SO answertlbinf32.dll在一個64位的.Net應用程序中

我需要從64位C#應用程序訪問它。 我沒有設法將其託管到單獨的代理過程中,我仍然獲得例外REGDB_E_CLASSNOTREG。我的代碼適用於x86平臺,但我必須爲64位實現它。

任何人都可以通過一步一步的過程幫助我將其啓動到代孕項目(Dllhost) - 或者可能是另一種使用它的方法嗎?

你知道一個更好的替代方法來瀏覽槽的本機COM Dll的所有方法類嗎?

+1

這是不是很清楚你期望任何人在這裏做什麼。找到替代品並不困難,所有這些接口都可以在System.Runtime.InteropServices.ComTypes命名空間的.NET中使用。你需要的唯一額外的東西是[LoadTypeLib()的pinvoke聲明](http://pinvoke.net/default.aspx/oleaut32/LoadTypeLib.html)。 –

+0

我試圖動態地發現COM DLL的方法,參數,枚舉類。 'tlbinf32.dll'對此非常方便(請參閱上面提到的SO答案),System.Runtime.InteropServices.ComTypes命名空間semms更麻煩,因爲我需要通過所有IDispatch並使用需要的IntPtr被編組。 – Malick

+0

@Hans對不起,鏈接到tlbinf32.dll的API是錯誤的,我刪除它。 – Malick

回答

3
  • 打開Windows的‘組件服務’
  • 開放節點,以‘我的電腦/ COM +應用’
  • 單擊鼠標右鍵,選擇添加新的應用程序
  • 選擇一個‘空的應用程序’,名稱它的「tlbinf」例如
  • 請確保您選擇「服務器應用程序」(意思是它的代理嚮導將很好地幫助您創建)
  • 選擇您希望服務器應用程序運行的用戶爲(爲了測試你可以選擇Ë交互式用戶,但這是使)
  • 你不必添加任何角色,沒有任何用戶
  • 開放這個新創建的應用程序,在「組件」單擊鼠標右鍵,選擇添加一個新的重要的決定一個
  • 選擇嚮導檢測到3個接口後,露出

這就是它來安裝新組件(S)

  • 瀏覽到您的tlbinf32.dll位置,按「下一步」。您應該看到這樣的事情:

    enter image description here

    現在你可以使用相同的客戶端代碼和它應該工作。請注意,性能不具有可比性(進程外與進程內)。

    您剛剛創建的代理應用程序有很多參數,您可以在以後使用相同的用戶界面重新配置。您還可以編寫腳本或編寫代碼(C#,PowerShell,VBScript等)以自動完成上述所有步驟。

  • +0

    完美,簡單,**有效**和清晰!它是否適用於我需要從x64調用的所有x86本機COM DLL? – Malick

    +1

    downvoters,請詳細解釋 –

    +1

    @Malick - 某些DLL可能不起作用(例如,如果它們不能正確處理編組),但該原則對所有人都有效。 –

    相關問題