Transformer un simple C# DLL dans un COM interop composant
Comment puis-je faire un C# DLL dans un COM interop DLL qui peut être consommé par une application VB6?
Vous devez vous connecter pour publier un commentaire.
Comment puis-je faire un C# DLL dans un COM interop DLL qui peut être consommé par une application VB6?
Vous devez vous connecter pour publier un commentaire.
C'est la réponse que je voulais trouver dans StackOverflow mais ne pouvait pas. Il s'avère être assez facile de transformer un simple C# dll dans une dll COM.
Pour créer le C# dll
Créer une solution avec une classe C# du projet. La classe doit avoir une interface pour les propriétés/méthodes et une interface pour les événements. Assigner des attributs GUID de la classe et des interfaces comme décrit dans MSDN - Exemple de Classe COM (Guide de Programmation C#). Voir aussi: MSDN - Comment: déclencher des Événements Gérés par un récepteur de COM.
Dans les Propriétés de Projet > onglet Application > Assemblée bouton d'Information > cochez la case "Faire de l'assemblée COM-Visible". De ce fait, toutes les méthodes publiques de la classe COM visibles.
Dans les Propriétés de Projet > onglet Build > Set "Plate-forme cible" pour x86.
C'est tout ce que vous devez faire pour créer la DLL. Pour appeler la DLL, vous devez l'enregistrer.
L'enregistrement de la DLL sur votre machine de développement
Vous pouvez enregistrer la DLL à l'une de ces façons:
Manuellement le registre de la DLL avec RegAsm. Cette option permet d'enregistrer la DLL dans le répertoire de votre choix, plutôt que dans le répertoire build. C'est la méthode que j'ai utilisé.
Ouvrir une invite de commandes avec des droits d'administrateur et tapez
RegAsm.exe peut être trouvé dans "C:\Windows\Microsoft.NET\Framework\v2.0.50727" alors que "mydll.dll" c'est le nom de votre fichier DLL;
tlb
signifie "créer une bibliothèque de type";codebase
signifie "écrire l'emplacement du répertoire de la base de Registre, en supposant qu'il n'est pas placé dans le GAC".RegAsm affichera un avertissement que l'assemblée devrait être nommée fort. Vous pouvez l'ignorer.
À ce stade, vous devriez être en mesure d'ajouter une référence à la DLL COM en VB6, le voir avec l'Intellisense, et exécuter une DLL COM.
Installation de la DLL avec InstallShield
Si vous utilisez l'Assistant pour installer la DLL avec le reste de votre application, procédez de la manière suivante.
Dans InstallShield, ajouter un nouvel élément à la liste des Composants. Pensez à associer le Composant avec une Fonctionnalité.
Définir une propriété de composant ".NET COM Interop" sur "Oui".
Ajouter l' .fichier dll à la section Fichiers du Composant.
Ne pas cocher la case "Auto-Inscription" propriété.
Cliquez-droit sur le .fichier dll et sélectionnez "Définir le Fichier de Clé".
Ajouter l' .fichier tlb à la section Fichiers du Composant.
Cochez la case "Auto-Inscription" propriété de.
La version correcte de la .Net Framework doit exister sur l'ordinateur cible.
Que c'est.
-tlb -codebase
. Le naufrage de ma tête sur ce pour quelques heures jusqu'à ce que j'ai trouvé cette. Merci!En extension à @Kieren Johnstone réponse pratique à l'exemple de code dans la classe des modifications que vous devez faire:
À partir de:
À:
Espère que cela vous fait gagner un certain temps
GetDellAsset
en VB6 si vous essayez d'accéder à la classe par le biaisCreateObject
?Microsoft a un moyen rapide de ici. Toutefois, vous aurez besoin d'enregistrer la dll. Pour faire de votre C# dll plus comme une simple dll C (C# non géré Exportations), l'utilisation cette méthode, qui est décrit en détail ici.
COM Interop est une technologie inclus dans le .NET Framework Common Language Runtime (CLR) qui permet de Modèle d'Objet Composant (COM) les objets pour interagir avec .NET les objets, et vice versa. COM Interop vise à fournir un accès à l'existant composants COM, sans que le composant d'origine être modifié, et vice-versa.
En savoir plus:
http://www.writeulearn.com/com-interop-using-csharp/