2012-04-12 9 views
2

Comment puis-je convertir un serveur COM en un ensemble CLR de sorte que je n'ai pas à réécrire quoi que ce soit d'abord.Comment convertir un assemblage COM en un assemblage CLR?

+1

Est-ce que cela signifiait que une (très bonne, complète) auto-réponse? Parce qu'il manque une question de toute façon! – Widor

+0

C'était ma façon de fournir un document de ce que j'ai fait pour convertir un ensemble COM en un ensemble CLR. Je voulais juste partager avec la communauté. –

+1

C'est bien (et encouragé) - c'est juste '[meilleure étiquette] (http://meta.stackexchange.com/questions/17463/can-i-answer-my-own-questions-even-those-where-i- Connaissez-la-réponse-avant-de-demander) 'pour poser la question que votre info répond, puis répondez à votre propre question. Cela permet deux choses - d'autres peuvent ajouter des réponses potentiellement meilleures et ceux qui cherchent une réponse peuvent chercher plus facilement. – Widor

Répondre

0

J'ai posté ceci ici pour l'OP, comme ils l'ont posté originalement comme un edit to question. Plutôt que de réécrire un serveur COM (écrit en 1992 en utilisant C++/MFC) dans .Net, j'ai décidé de le convertir en un ensemble CLR. Pour prendre un assembly COM (add32.exe) et l'utiliser à partir d'un client .Net, nous devons créer un wrapper appelable. Exécutez tous les outils avec l'invite de commandes Visual Studio (en tant qu'administrateur).

Étape 1: Signer un ensemble COM avec un nom fort

enter image description here

Etape 2: Convertir les définitions trouvées dans une bibliothèque de type COM dans un ensemble CLR

Convertir les définitions trouvé dans une bibliothèque de type COM dans un assembly CLR en utilisant l'outil Tlbimp.exe. La sortie de Tlbimp.exe est un fichier binaire (un assembly) qui contient des métadonnées d'exécution pour les types définis dans la bibliothèque de types d'origine. La sortie est un fichier DLL. Je spécifie un espace de noms afin que nous puissions facilement inclure les métadonnées dans le client COM .Net.

enter image description here

Etape 3: Utilisation Ildasm.exe pour visualiser l'ensemble.

enter image description here

Pour utiliser l'ensemble de CLR, nous de créer une référence dans la solution. Recherchez le fichier dll et ajoutez-le comme référence.

enter image description here

Les clients qui utilisent des objets COM doivent importer des métadonnées en utilisant l'espace de noms créé à l'étape 2.

#using "Add32Pkg"; 

Ensuite, utiliser la fonctionnalité COM:

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