28 votes

Une DLL C # simple - comment l'appeler depuis Excel, Access, VBA, VB6?

J'ai une bibliothèque de classe simple écrite en c #.

 using System;
namespace TestDll
{
    public class Test
    {
        public string HelloWorld
        {
            get
            {
                return "Hello World";
            }
        }
    }
}
 

Ma question est de savoir comment puis-je appeler cette fonction HelloWorld à partir de Microsoft Office Visual Basic (qui je pense est VB6)?

Ma première étape a été d'ajouter la DLL comme référence - mais lors de la navigation et de la sélection de la DLL compilée, le message "Impossible d'ajouter une référence au fichier spécifié". a été jeté.

Quelqu'un peut-il m'indiquer dans la bonne direction pourquoi / comment faire en sorte que cela fonctionne?

Merci d'avance donc!

36voto

AnthonyWJones Points 122520

Vous ne pouvez pas accéder à un membre statique via COM interop. En fait, votre code n'a même pas compiler, la méthode doit être dans une classe. Voici comment vous pouvez le faire:-

[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("01A31113-9353-44cc-A1F4-C6F1210E4B30")]  //Allocate your own GUID
public interface _Test
{
	string HelloWorld {get; };
}

[ClassInterface(ClassInterfaceType.None)]
[Guid("E2F07CD4-CE73-4102-B35D-119362624C47")]  //Allocate your own GUID
[ProgId("TestDll.Test")]
public class Test : _Test
{
     public string HelloWorld { get { return "Hello, World! "; } }
    }

Les propriétés du projet Construire onglet, sélectionnez Enregistrer pour COM interop. Ainsi, vous pouvez voir les résultats rapidement. Pour installer la dll sur une autre machine, vous devez utiliser regasm.

Alors la consommer:-

Dim o : Set o = CreateObject("TestDll.Test")
MsgBox o.HelloWorld

Vous pouvez également faire référence à la dll et l'utiliser dès le début de la liaison:-

Dim o As TestDll.Test
Set o = New TestDll.Text
MsgBox o.HelloWorld

15voto

divinci Points 2924

Et à l'étendre sur l'enregistrement de la DLL sur des ordinateurs différents.

Une fois que vous compiler et générer le code ci-dessus sur votre machine de développement, si vous avez

Les propriétés du projet Construire onglet, sélectionnez Enregistrer pour COM interop.

votre sortie de Visual Studio dossier (généralement bin\Debug) où l'compilé *.dll est trouvée aura également un *.fichier tlb.

Ce *.fichier tlb est un "Type " Bibliothèque". Et il est requis par la machine client pour comprendre les différents "Types" dans votre *.dll et pour dire à l'ordinateur client comment l'utiliser.

Par la mise en au dessus de "s'Inscrire pour COM interop' -- aswell comme un *.fichier tlb, l'assemblée(dll) est inscrit sur votre machine, et est donc accessible.

Dans VBA, vous pouvez maintenant ajouter ce fichier comme une référence par

L'Éditeur VBA -> Outils -> Références -> Parcourir -> Sélectionnez

cela vous permettra de déclarer les classes trouvées dans votre bibliothèque.

Dim TestClass As Test
Set TestClass = New Test
MsgBox TestClass.HelloWorld

CEPENDANT - si vous voulez utiliser votre dll sur un autre ordinateur client, vous devrez utiliser regasm.exe - pour vous inscrire à l'assemblée(dll) sur cette machine.

Cela peut être fait par la ligne de commande,

regasm.exe

dans ce cas

regasm.exe TestDll.dll

une fois que vous avez enregistré à l'assemblée sur la nouvelle machine de client, vous serez en mesure d'y accéder une fois de plus l'ajout d'une référence à ses *.tlb

Espérons que cette aide!

6voto

Jage Points 465

Je voulais juste dire que dans Visual Studio 2008, pour obtenir le fichier .tlb généré, vous devez également aller sous Application | Informations sur l'assemblage et sélectionnez "Rendre l'assemblage COM visible". Cela m'a pris un certain temps pour trouver cela, alors j'espère que cela aide les autres.

0voto

Matthew Dresser Points 4466

Pour ajouter à la bonne réponse d'AnthonyWJones, vous devrez également enregistrer votre DLL à l'aide de Regasm.exe qui ajoute les entrées de registre nécessaires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X