COM組件轉換成.NET組件

來源:互聯網
上載者:User
文章目錄
  • 產生Interop 組件
利用類型庫匯入器(Type Library Importer)可以將其封裝成一個.NET組件,然後就可以像使用.NET組件一樣使用它了。
.NET架構只是提供了一個封裝,並沒有真正改變原有的對象
1.找到要轉換的.dll檔案
2.在命令提示字元視窗中輸入.dll檔案的檔案路徑,轉到.dll檔案所在的檔案夾下。
3.輸入 tlbimp jmail.dll /out:jmail_new.dll然後斷行符號,就會在當前的檔案夾下產生一個DLL檔案 jmail_new.dll

4.將轉換後的檔案jmail_new.dll複製到應用程式的bin檔案夾下即可

from: http://www.newasp.net/tech/net/12619.html

 如何:將本機 COM 伺服器用於 TLBIMP

更新:2007 年 11 月

與其他 .NET 語言不同,Visual C++ 提供允許直接使用非託管函數(包括 COM 介面)的 Interop 功能。利用這一點,開發人員可以避免 Tlbimp.exe 及其缺點。有關更多資訊,請參見使用 .NET 中的本機 COM 伺服器。

本主題示範如何通過Managed 程式碼 類型庫匯入程式 (Tlbimp.exe) 工具使用 COM 物件。如果給定一個 COM 類別型庫(或包含 COM 組件和類型庫的 DLL),此 .NET Framework 工具會產生可由任何 .NET 語言使用的託管Interop 組件。但是,不建議 Visual C++ 程式員使用此技術(特別是處理大型和/或複雜的 COM 類別型庫時)。

下面的樣本包含使用 Quartz.dll 中定義的 COM 介面時所需的步驟和代碼,Quartz.dll 安裝在 Windows XP 的 Windows/System32 目錄中。這些介面封裝了 DirectShow 功能,允許播放 AVI 檔案。若要從命令列執行 Tlbimp.exe,需要通過執行 C:"Program Files"Microsoft.NET"SDK"v2.0"Bin 目錄中的 Sdkvars.bat 將 .NET Framework 工具添加到系統路徑中。[註:Sdkvars.bat位於目錄C:"Program Files"Microsoft Visual Studio 8"SDK"v2.0"Bin]【Tlbimp.exe位於目錄C:"Program Files"Microsoft Visual Studio 8"SDK"v2.0"Bin】

產生Interop 組件
  1. 在命令提示視窗中,在 c:"windows"system32 目錄中執行 tlbimp quartz.dll 命令。(得到的Interop 組件名稱以 COM 類別型庫的名稱為基礎;在此樣本中,得到的檔案為 QuartzTypeLib.dll。)

  2. 將Interop 組件移動到特定的目錄中,使用該Interop 組件的應用程式將在此執行。

 樣本

下面的代碼定義一個控制台應用程式,該應用程式使用前面產生的Interop 組件顯示一個 AVI 檔案。

使用有效 AVI 檔案名稱執行得到的 .exe 檔,該檔案將在視窗中呈現。

// AVIPlayer.cpp      
// compile with: /clr
#using <QuartzTypeLib.dll>
using namespace QuartzTypeLib;
using namespace System;
void DisplayUsage() {
Console::WriteLine("AVIPlayer: Plays AVI files.");
Console::WriteLine("Usage: AVIPlayer.EXE <filename>");
}
int main() {
array<String^>^ args = Environment::GetCommandLineArgs();
if (args->Length != 2) {
DisplayUsage();
return 0;
}

String^ filename = args[1];
if (filename->Equals("/?")) {
DisplayUsage();
return 0;
}
FilgraphManager^ graphManager = gcnew FilgraphManager();
IMediaControl^ mc = dynamic_cast<IMediaControl^>(graphManager);
mc->RenderFile(filename);
mc->Run();
Console::WriteLine("press any key");
Console::ReadLine();
}

 from: http://msdn.microsoft.com/zh-cn/netframework/8989aw26.aspx

使用 .NET 中的本機 COM 伺服器

更新:2007 年 11 月

本節介紹用於從 .NET 應用程式使用現有 COM 組件的可用選項,並概括了各種方法的優點和缺點。通常,推薦的方法是 C++ Interop。

 使用 TLBIMP

Windows 軟體開發套件 (SDK) 類型庫匯入程式 (Tlbimp.exe) 是一個可將 COM 類別型庫公開為稱作Interop 組件的一種程式集的工具。此程式集為給定類型庫中的各個 COM 介面定義託管等效項(或封裝)。

當調用Interop 組件的方法時,將執行從託管到非託管的轉換並且將控制項傳遞給 COM 組件。同樣地,當非託管 COM 函數返回時,將執行從非託管到託管的轉換。預設情況下,檢查 COM HRESULT 以查看是否失敗,如果 HRESULT 沒有指示成功,將引發異常。類似地,COM 組件初始化和介面查詢是由Interop 組件執行的,因此從調用程式碼後置。

Interop 組件不替代它們代表的 COM 組件;在 COM 組件中保留非託管 COM 函數,因此必須在目標電腦上安裝並註冊此組件,否則調用Interop 組件將失敗。

使用 Tlbimp 是從Managed 程式碼使用 COM 組件的最簡單方法,但存在一些嚴重的缺點,特別是對於大型和/或複雜的 COM 介面。這些缺點是:

  • Tlbimp 為類型庫中的每個 COM 介面產生託管介面。此行為無法取消,因此結果程式集會變得非常大。(例如,Tlbimp 為 Mshtml.dll 產生的Interop 組件超過 8 MB。) 也無法隱藏只打算在 COM 組件內部使用的介面。

  • Tlbimp 支援有限的幾個資料類型。通常,不受支援的類型作為泛型、非型別安全的 IntPtr 類型匯入到託管世界中,並需要編寫易於出錯且冗長的封送代碼以使用程式集,但有時 Tlbimp.exe 根本無法公開介面的成員。

  • Tlbimp 產生一個單獨的Interop 組件,它必須與最終應用程式一起部署。

如果這些缺點是可接受的,請參見如何:將本機 COM 伺服器用於 TLBIMP 擷取一個樣本。

 修改 MSIL

Tlbimp 的缺點可在一定程度上得到減輕,方法是使用 MSIL 反組譯工具 (Ildasm.exe) 反組譯碼Interop 組件,編輯 MSIL 以移除不必要的介面定義並替換參數類型,然後用 MSIL 組譯工具 (Ilasm.exe) 重新彙編 MSIL。此過程易於出錯並且要求具備 MSIL、非託管類型和 .NET 類型的知識。而且,如果更新了 COM 介面,必須重新執行此過程。

 C++ Interop

在 Visual C++ 中,可以完全避免 Tlbimp 和編輯 MSIL 的缺點,因為與 Visual Basic 和 C# 不同,Visual C++ 可以通過常用的 COM 機制(例如 CoCreateInstanceQueryInterface)直接使用 COM 物件。這是可能的,因為 C++ Interop 的功能可導致編譯器自動插入轉碼以在託管和非託管函數之間移動。

使用 C++ Interop,可以像通常那樣使用 COM 組件,也可以將其封裝到 C++ 類中。這些封裝類稱為自訂運行時可調用封裝(或 CRCW),與在應用程式代碼中直接使用 COM 相比,它們有兩大優點:

  • 結果類可從 Visual C++ 之外的語言中使用。

  • COM 介面的細節可從託管用戶端代碼中隱藏。.NET 資料類型可用於替換本機類型,並且資料封送的細節可在 CRCW 內部透明地執行。

在如何:將本機 COM 伺服器與 CRCW 一起使用 中示範如何使用 Visual C++ 封裝 COM 介面。

無論是直接使用 COM 還是通過 CRCW 使用 COM,必須封送參數類型(簡單的、可直接複製到本機結構中的類型除外)。有關資料封送的資訊,請參見使用 C++ Interop(隱式 PInvoke)。

 From: http://msdn.microsoft.com/zh-cn/netframework/zeaxheha.aspx

使用樣本

首先將excel.exe copy 到 .."Microsoft Visual Studio .NET 2003"SDK"v1.1"Bin目錄下
利用.net 中帶的工具在命令提示字元下執行tlbimp excel.exe.這樣就不會因為你的Excel是xp或2000的不同要去找不同的*.olb檔案,還有一點就是因為在2000以後的版本中沒有了excel9.olb這個檔案了。
通過執行tlbimp excel.exe後我們會得到excel.dll檔案。
只要有了這個Excel.dll,現在我們就能使用Excel的各種操作函數了。

from:http://www.bloghome.cn/posts/68543.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.