Asp.net
什麼是互操作 dll?
我需要澄清一下。我有一個使用 Crystal Reports 的 Reportwriter dll。它是用VB6編寫的。我必須將此 dll 添加到我的 asp.net 項目中,它會在其中創建一個互操作 dll。
據我了解,interop dll 作為中介存在,因此我的 .net 程式碼可以與 Reportwriter dll 對話。
那麼我是註冊互操作 dll 還是註冊原始 dll?
在VB6中編寫程式碼時,編譯結果是一個COM組件。COM 組件提供介面、協同類、結構和枚舉,這些通常使用 COM 類型庫來描述。但是,要在 .NET 中使用該 COM 組件,您需要採用 .NET 可以理解的格式的類型描述 - 即 .NET 程序集(因為它不能直接與類型庫一起使用)。因此,互操作程序集只是一個“轉換的”COM 類型庫,從某種意義上說,它包含與類型庫中相同事物相對應的介面、結構等的描述。
(以上內容有所簡化,因為互操作程序集不必從類型庫生成 - 例如,如果需要,您可以手動編寫程式碼。)
與常說的相反,互操作程序集不包含任何可執行程式碼,也不進行任何編組。它只包含類型定義,它唯一可以有方法的地方是在介面中,而介面中的方法沒有實現。將 .NET 呼叫編組到 COM 呼叫實際上是由 CLR 本身根據從互操作程序集載入的類型描述完成的——它動態生成所有必要的程式碼。
現在關於你的問題。您需要註冊您的 COM DLL(VB6 的輸出)項目 - 例如,使用
regsvr32.exe. 您不應該(事實上,您不能)以這種方式註冊互操作程序集,因為它不是 COM 組件 - 它只是一個普通的 .NET 程序集,因此您可以將它與您的 .exe/.dll 放在同一個文件夾中,或像往常一樣將其放入 GAC。