2012-04-12 16 views
2

Wie kann ich einen COM-Server in eine CLR-Assembly konvertieren, so dass ich zunächst nichts neu schreiben muss.Wie konvertiere ich eine COM-Assembly in eine CLR-Assembly?

+1

Ist das gemeint als eine (sehr gute, umfassende) Selbstantwort? Weil es auf jeden Fall eine Frage fehlt! – Widor

+0

Es war meine Art, ein Dokument von dem zu liefern, was ich getan habe, um eine COM-Assembly in eine CLR-Assembly umzuwandeln. Ich wollte nur mit der Community teilen. –

+1

Das ist gut (und ermutigt) - es ist nur '[bessere Etikette] (http://meta.stackexchange.com/questions/17463/can-ianswer-my-own-questions-even-those-where-i- wusste-die-antwort-vor-fragen-) um die Frage zu stellen, dass deine Info antwortet, dann beantworte deine eigene Frage. Dies ermöglicht zwei Dinge - andere können potentiell bessere Antworten hinzufügen und diejenigen, die nach einer Antwort suchen, können leichter suchen. – Widor

Antwort

0

Ich habe dies hier für das OP gepostet, da sie es ursprünglich als Bearbeitung in Frage gestellt haben.

Statt einen COM-Server (geschrieben im Jahr 1992 mit C++/MFC) in .NET neu zu schreiben, habe ich beschlossen, es in eine CLR-Assembly zu konvertieren. Um eine COM-Assembly (add32.exe) zu erstellen und sie von einem .NET-Client zu verwenden, müssen wir einen aufrufbaren Wrapper erstellen. Führen Sie alle Tools mit der Visual Studio-Eingabeaufforderung (als Administrator) aus.

Schritt 1: COM Assembly mit einem starken Namen Zeichen

enter image description here

Schritt 2: Definitionen Konvertieren in einer COM-Typbibliothek in eine CLR-Assembly

Konvertieren Sie die Definitionen gefunden in einer COM-Typbibliothek in einer CLR-Assembly mithilfe des Tools Tlbimp.exe gefunden. Die Ausgabe von Tlbimp.exe ist eine Binärdatei (eine Assembly), die Laufzeitmetadaten für die Typen enthält, die in der ursprünglichen Typenbibliothek definiert sind. Die Ausgabe ist eine DLL-Datei. Ich gebe einen Namespace an, damit wir die Metadaten problemlos in den .Net-COM-Client einbinden können.

enter image description here

Schritt 3: Mit Ildasm.exe die Baugruppe anzuzeigen.

enter image description here

die CLR-Assembly zu verwenden, uns eine Referenz für die es in der Lösung zu schaffen. Suchen Sie nach der DLL-Datei und fügen Sie sie als Referenz hinzu.

enter image description here

Clients, die COM-Objekte verwenden sollten Metadaten importieren den Namespace in Schritt 2.

#using "Add32Pkg"; 

Dann erstellt unter Verwendung der COM-Funktionalität zu nutzen:

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); 
     } 
    } 
} 
Verwandte Themen