2014-12-24 45 views
-1

可能有問題已經有我的答案,我是一個剛剛新手,我無法找到答案,完全解決我的問題。COM interop DLL文件位於與exe文件分開

我正在開發一個Delphi xe5應用程序,它使用.NET程序集。

我使用Regasm.exe註冊了程序集。 \ Regasm.exe/tlb TestLib.dll

接下來,從Delphi的Conponent菜單中選擇Import Component,然後導入類型庫,然後創建TestLib_TLB.pas文件。 通過pas文件將TestLib_TLB.pas添加到項目中,我可以調用程序集提供的函數/過程。

問題是如果DLL位於與應用程序exe文件不同的文件夾中,程序集的API調用將會失敗。

我試圖使用gacutil.exe將該DLL文件註冊到GAC中,但這並沒有解決問題。

上面的過程有什麼問題?

+0

您如何計劃將此應用程序部署到最終用戶? –

+0

@DavidHeffernan感謝您的評論,我計劃手動部署此應用程序 - 只需複製文件並根據需要執行一些命令(可選)。 – Naoki

+0

那麼你爲什麼反對將DLL放在EXE旁邊呢? FWIW,我認爲regasm註冊會在註冊時註冊DLL的位置。把它放在你想要的地方,然後調用regasm。 –

回答

0

Regasm sintax應該

regasm TestLib.dll /tlb:TestLib.tlb 

這將註冊TestLib.dll以及創建和註冊TestLib.tlb。

之後,您不應該移動,重命名,替換或刪除TestLib.dll或TestLib.tlb,因爲它們的位置和COM接口現在寫入註冊表中。如果必須先註銷「舊」組件

regasm TestLib.dll /unregister /tlb:TestLib.tlb 

然後放置新的dll並重新註冊它。

regasm SomeFolder\TestLib.dll /tlb:AnotherFolder\TestLib.tlb