Bonjour, à tous.
Je vous explique ce que je souhaite faire, alors je veux faire une dll écrite en C# (Visual Studio 2012)et l'utiliser en VB Access. Ma dll C# génère des évènements que je veux donc aussi utiliser en VB Access 2003.
J'ai donc créé une dll exposé à COM avec une interface (pour pouvoir l'utiliser sur VB Access)et disposant d'évènement, que j'ai ensuite testé en console pour voir si la dll fonctionne avec les évènements. Puis la même dll sans les évènements pour tester cette dernière sur VB Access. Et d'après mes testes et ma compréhension cela fonctionne.
Un peu de code pour voir ? (C'est le test console et le résultat est un affichage "C'est bon !!!" toutes les trois secondes)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class Program { static void Main() { IMetronome m = new Metronome(); m.Tick += new TickHandler(afficheEvent); m.Start(); } private static void afficheEvent(object sender, ClassEventArgs e) { Console.WriteLine(e.MyEvent); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 public delegate void TickHandler(Metronome m, ClassEventArgs e); [ComVisible(true)] [Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4")] [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)] public interface IMetronome { event TickHandler Tick; void Start(); } [Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")] public class Metronome : IMetronome { public event TickHandler Tick; public void Start() { while (true) { System.Threading.Thread.Sleep(3000); if (Tick != null) { ClassEventArgs e = new ClassEventArgs("c est bon !!"); Tick(this, e); } } } }Dans ma dll C# il y a les deux classes (Metronome et ClassEventArgs).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public class ClassEventArgs : EventArgs { private string myEvent = null; public ClassEventArgs(string theEventText) { if (theEventText == null) throw new NullReferenceException(); myEvent = theEventText; } public string MyEvent { get { return this.myEvent; } } }
Pour utiliser cette dll sur VB Access (sur un autre ordinateur), je génère un fichier .reg avec un RegAsm à partir du fichier dll.
J'enregistre la dll à l'aide d'un gacutil -i.
Et pour finir le fichier .tlb je l'ajoute dans les références du projet de VB Access, jusque là tout va bien.
Maintenant je veux utiliser ma dll c# sur VB Access je fais alors:
Et là c'est le drame je me retrouve avec un obj.add_Tick et un obj.remove_Tick, j'ai donc fait une supposition que .add_Tick correspond au += en C# et .remove_Tick au -= , cela permet de s'abonner et de se désabonner. Mais je n'arrive pas à les utiliser car je pense qu'il faut aussi créer une méthode qui va être appelé au moment de l'évènement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Dim obj As IMetronome Set obj = New Metronome
Je viens donc vers vous pour trouvez de l'aide sur l'utilisation de ces deux méthodes .add_Tick et .remove_Tick et pour création de la méthode qui va être appelée lors de l'évènement.
Merci d'avance pour vos réponses, une question ? Nécessitez pas à me la poser.
Partager