Bonjour,
J'essaye de rendre une DLL compatible COM pour qu'elle fonctionne en VB6. Les méthodes fonctionnent, par contre pour les évents, la réponse se fait uniquement si elle est immédiate dans la fonction. Par contre s'il a un passage dans une autre classe, lors du retour, le delegate est toujours nul. Ceci en VB6, en cas d'utilisation de la dll en C#, aucun probleme au niveau des évents.
Par exemple :
Marchera en cas d'appel depuis le vb6 mais si je modifie la classe Math comme ci dessous
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 [ComVisible(true)] [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface IMathEvents { void OnOperationCompleted(string message); } [ClassInterface(ClassInterfaceType.None)] [ComSourceInterfaces(typeof(IMathEvents))] public class Math : ServicedComponent , IMath { public int Add(int x, int y) { if (null != this.OnOperationCompleted) this.OnOperationCompleted("Operation completed"); return x + y; } [ComVisible(false)] public delegate void OperationCompletedDel(string message); public event OperationCompletedDel OnOperationCompleted; }
je reçois plus l’évent qui est activé par ReturnEvent lorsqu'il a fini le traitement depuis une autre classe.
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 public class Math : ServicedComponent , IMath { public int Add(int x, int y) { WorkinAnotherClass(x,y); return x + y; } public void ReturnEvent() { // OnOperationCompleted sera toujours null if (null != this.OnOperationCompleted) this.OnOperationCompleted("Operation completed"); }
D’où mon interrogation, la liaison COM entre le vb6 et ma dll ne fonctionne t-il que le temps de l'appel de la procédure (Add pour l'exemple) ?
Partager