Bonjour,
J'ai fait beaucoup de recherche et je n'arrive pas au résultat que je voudrais.
Je dois utiliser une classe que j'ai fait en c# dans un programme fait avec C++Builder. C'est donc un programme non managé.
Je voudrais pouvoir utiliser cette classe normalement comme une autre classe.
Pour l'instant, j'arrive au code suivant :
Et j'ai aussi ceci dans le fichier include mais je crois que tout n'est pas utilisé dans le morceau de code du dessus :
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 void __fastcall TForm1::Button1Click(TObject *Sender) { param.cArgs=0; param.rgvarg=NULL; param.cNamedArgs=0; param.rgdispidNamedArgs=NULL; IConnectionPointContainer* pCPC = NULL; IConnectionPoint* pCP = NULL; if (SUCCEEDED(::CLSIDFromProgID(L"libperso.ClasssePerso", &clsID))) { if (SUCCEEDED(CoCreateInstance(clsID, NULL, CLSCTX_ALL, IID_IDispatch, (void**)&pDisp))) { if (SUCCEEDED(pDisp->GetIDsOfNames(IID_NULL, &methodStart,1, GetUserDefaultLCID(), &dispid))) { if (SUCCEEDED(pDisp->Invoke(dispid, IID_NULL, GetUserDefaultLCID(), DISPATCH_METHOD, ¶m, &vntResult, NULL, NULL))) { //bool temp = vntResult.boolVal; //pDisp->Release(); } } } } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { CoUninitialize(); }
Cela me permet dans d'invoquer les fonctions de la classe même si la fonction demande des paramètres. Mais je ne peux pas manipuler ma classe comme n'importe quel autre objet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 DISPID dispid; IDispatch *pDisp; OLECHAR *methodStart; OLECHAR *methodStop; CLSID clsID; DISPPARAMS param; VARIANT vntArgs, vntResult;
Et j'ai aussi un problème beaucoup plus grave. Ma classe génère des évènements. Il faut donc que je renseigne quelle est la fonction à appeler. Seulement, je ne sais pas comment le faire depuis mon programme c++.
J'ai déjà posé quelques questions mais je n'avance pas :
http://www.developpez.net/forums/d84...dll-perso-net/
http://www.developpez.net/forums/d89...ser-reference/
J'ai aussi regardé beaucoup de site internet qui parlent de tout ceci. J'ai regardé les sites qui parlent d'utiliser un delegate c# renseigné par un code non managé mais je bloque toujours.
La classe c# a déjà tout ce qu'il faut pour rendre disponible ses delegates via des interfaces comme décrit sur les autres sites.
Pouvez-vous m'aider ?
Merci d'avance
Partager