在我們的項目中,我們在asp.net應用程序中通過COM重用了很多Delphi代碼。爲什麼COM Interop比.NET中的P/Invoke更受歡迎?
像這樣:傳統的德爾福DLL => Delphi的COM包裝=> .NET互操作程序=> asp.net(MVC)
我們有關於訪問衝突,dll的卸載等一些問題......我有現在移植一些直接通過P/Invoke代碼使用遺留的dll。
當我查看有關COM和P/Invoke的資源時,人們幾乎總是建議使用COM。這是爲什麼?不會的P/Invoke具有以下優點:
- 簽出代碼總是會使用正確的DLL,而不是最後的註冊COM
- 多個版本可以在服務器上並行運行(例如:DEV,測試和QA)
- 沒有更多的COM註冊的麻煩
- 比COM通訊(文章我讀指示的速度提高了30%)要快得多
你可以從64位進程p/invoke到一個32位的DLL?我不這麼認爲。 – Bond
你可以給一些建議COM建議P/Invoke嗎?我非常同意你的看法,P/Invoke是更好的解決方案。 .NET BCL中的大部分內部都是通過對Win32 API的P/Invoke實現的。只有使用COM互操作的理由是你沒有選擇的地方,例如與Office應用程序互操作,或僅COM的Windows API部件。 – Govert
記住DLL地獄?代替使用正確的DLL,您的代碼將使用第一個可用的dll具有相同的名稱。直到運行時纔會檢測到任何API更改,這意味着版本控制幾乎不可能。你不能創建一個能夠同時爲新舊客戶端提供服務的DLL,而不必改變這些函數本身的名字 –