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 le DLL comme référence - mais en parcourant et en sélectionnant le DLL le message "Impossible d'ajouter une référence au spécifié) fichier. "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!
Vous ne pouvez pas accéder à un membre statique via COM interop. En fait, votre code ne compile même pas, la méthode devrait ê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! "; } }
}
Dans l'onglet Générer les propriétés du projet, sélectionnez S'inscrire à l'interopérabilité COM. Ainsi, vous pouvez voir les résultats rapidement. Pour installer la DLL sur une autre machine, vous devez utiliser regasm.
Pour ensuite consommer ceci:
Dim o : Set o = CreateObject("TestDll.Test")
MsgBox o.HelloWorld
Vous pouvez également référencer la DLL et utiliser une liaison anticipée:
Dim o As TestDll.Test
Set o = New TestDll.Text
MsgBox o.HelloWorld
Et pour développer l'enregistrement du DLL sur différents ordinateurs.
Une fois que vous avez compilé et construit le code ci-dessus sur votre machine de développement, si vous avez
Dans l'onglet Générer les propriétés du projet, sélectionnez S'inscrire à l'interopérabilité COM.
votre dossier de sortie Visual Studio (généralement bin\Debug) où se trouve le fichier * .dll compilé aura également un fichier * .tlb.
Ce fichier * .tlb est une "bibliothèque de types". Et est nécessaire à la machine cliente pour comprendre les différents "types" dans votre * .dll et pour dire à la machine cliente comment l'utiliser.
En définissant le 'Register for COM interop' ci-dessus - ainsi qu'un fichier * .tlb en cours de production, l'assembly (dll) est enregistré sur votre machine et est donc accessible.
Dans VBA, vous pouvez maintenant ajouter ce fichier comme référence en
Éditeur VBA -> Outils -> Références -> Parcourir -> Sélectionner
cela vous permettra ensuite de déclarer les classes trouvées dans votre bibliothèque.
Dim TestClass As Test
Set TestClass = New Test
MsgBox TestClass.HelloWorld
TOUTEFOIS - si vous souhaitez ensuite utiliser votre DLL sur une autre machine cliente, vous devrez utiliser regasm.exe - pour enregistrer l'assembly (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'assembly sur la nouvelle machine cliente, vous pourrez y accéder en ajoutant à nouveau une référence à son * .tlb
J'espère que cela t'aides!
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.
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.