2012-04-12 55 views
2

如何將COM服務器轉換爲CLR程序集,以便我不必首先重寫任何內容。如何將COM程序集轉換爲CLR程序集?

+1

這是否意味着爲:使用COM對象

enter image description here

客戶應使用步驟創建的命名空間2

#using "Add32Pkg"; 

然後,使用COM功能導入元數據一個(非常好,全面)自我回答?因爲它無論如何都缺少一個問題! – Widor 2012-04-12 15:45:31

+0

這是我提供一個文件,說明我是如何將COM程序集轉換爲CLR程序集的。只是想與社區分享。 – 2012-04-12 16:05:29

+1

這很好(並鼓勵) - 這只是'[更好的禮儀](http://meta.stackexchange.com/questions/17463/can-i-answer-my-own-questions-even-those-wherei-i-知道答案之前問)'問問題,你的信息回答,然後回答你自己的問題。這允許兩件事 - 其他人可以添加潛在更好的答案,尋找答案的人可以更容易地搜索。 – Widor 2012-04-12 16:33:40

回答

0

我在這裏發佈了這個OP,因爲他們把它作爲一個編輯來發布。

而不是在.NET中重寫COM服務器(用C++/MFC編寫),我決定將它轉換爲CLR程序集。要採用COM程序集(add32.exe)並從.Net客戶端使用它,我們需要創建一個可調用的包裝器。使用Visual Studio命令提示符(以管理員身份)運行所有工具。

步驟1:註冊一個COM組件具有強名稱

enter image description here

步驟2:轉換在COM類型庫中找到的定義爲CLR組件

轉換的定義使用工具Tlbimp.exe在COM類型庫中找到CLR程序集。 Tlbimp.exe的輸出是一個二進制文件(程序集),其中包含原始類型庫中定義的類型的運行時元數據。輸出是一個DLL文件。我指定了一個名稱空間,以便我們可以輕鬆地將元數據包含在.Net COM客戶端中。

enter image description here

步驟3:使用程序Ildasm.exe來查看組件。

enter image description here

要使用CLR程序集,我們打造的解決方案,它的參考。瀏覽該dll文件並將其添加爲參考。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.InteropServices; 
using Add32Pkg; 

namespace TestAdd32 
{ 

    class Program 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 

      Add32Server Add32 = new Add32Server(); 
      Add32.Init(201); 
     } 
    } 
}