Bonjour,
J'ai fait un composant COM en .net et il fonctionne tr�s bien, du moins je crois.
De .net � .net, �a fonctione tr�s bien car �a ne passe pas par les couches COM.
A parti d'Excel mon composant bien bien.
Mais � partir de C++ Builder (5), j'arrive � affecter mes propri�t�s, j'arrive � appeler mes m�thodes
, mais je n'arrive pas � affecter mes �v�nements
. La lith�rature (bouquin, aide en ligne , internet...) n'est pas tr�s causante sur ce sujet.
Si vous aviez une petite id�e pour moi ?
Voici mon code .net :
Il s'agit d'une classe Employe � laquelle on peut affecter un nom et une date de naissance. Et si on affecte la date de naissance le jour de son anniversaire, la classe doit rappeler un �v�nement.
Dans Builder, je suis pass� par le menu Projet/Importer une biblioth�que de types... puis par le bouton "Cr�er l'unit�" pour ajouter le code (ClassLibrary1_TLB.h et ClassLibrary1_TLB.cpp) � mon projet.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Windows.Forms; namespace ClassLibrary1 { public delegate void AnniversaireEventHandler(string nom); [ComVisible(true)] [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface Employe_Events { void Anniversaire(string nom); } [ComVisible(true)] [ProgId("ClassLibrary1.Employe")] [Guid("2A5FE789-63F4-406b-954A-0B6F025DFB9F")] [ClassInterface(ClassInterfaceType.AutoDual)] [ComSourceInterfaces(typeof(Employe_Events))] public class Employe { #region Variables privées private string _nom; private DateTime _dateNaissance; #endregion #region Propriétés [DispId(0)] public string Nom { get { return _nom; } set { _nom = value; } } public DateTime DateNaissance { get { return _dateNaissance; } set { //MessageBox.Show(value.ToShortDateString()); _dateNaissance = value; if ((Anniversaire != null) && (value.Day == DateTime.Now.Day) && (value.Month == DateTime.Now.Month)) { Anniversaire(this.Nom); } } } #endregion #region Evênements public event AnniversaireEventHandler Anniversaire; #endregion #region Fonctions public Employe() { } [ComRegisterFunction] private static void Register(Type t) { //MessageBox.Show("Enregistrement"); } [ComUnregisterFunction] private static void UnRegister(Type t) { //MessageBox.Show("Désenregistrement"); } #endregion } }
Ensuite j'essaie de me servir du composant COM :
Les commentaires pour affecter l'�v�nement sont des essais, mais aucun d'eux ne fonctionne (soit � la compile, soit � l'ex�cution). Le reste fonctionne.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include "ClassLibrary1_TLB.h" void __fastcall TForm1::FormShow(TObject *Sender) { TCOM_Employe *e = new TCOM_Employe(); CoInitialize(NULL); HRESULT resultat = e->CreateInstance(L"ClassLibrary1.Employe"); e->nom = L"David"; //e->add_Anniversaire((LPUNKNOWN)&OnAnniv2); //e->add_Anniversaire(t); e->DateNaissance = (double)TDateTime(2000,05,11); ShowMessage(e->nom); e->Release(); delete e; }
Partager