Dans ma dernière question, j'ai demandé l'exécution d'un formulaire C# dans un programme C++ -cli. Je l'ai fait fonctionner, mais j'ai des problèmes. J'essaierai d'être bref.Formulaire C# dans un programme C++
Mon programme C++ doit exécuter une forme C# et y exécuter des fonctions simples (augmentation des compteurs et leur affichage). Cependant, je ne connais pas la meilleure façon de le faire. Je forme initialisé dans une fonction init:
C++ - cli
SUTAdapter::Form1^ *ptForm1; // Global variable
...
FormProject::Form1^ form1;
form1 = gcnew FormProject::Form1();
ptForm1 = &form1;
(*ptForm1)->Show();
(*ptForm1)->incCounter(0);
D'autres fonctions dans le programme C++ il suffit d'appeler incCounter. Mon problème est, qu'un deuxième appel d'une autre fonction à incCounter rend mon C# Form1 nul (this == null), donc je peux utiliser le code de fonction de incCounter mais pas les variables de classe. C'est étrange, comme si le programme disposait le FormProject.
C#
public void incCounter(int counter)
{
int param1 = counter;
this.count[counter]++; // this == null in sucessive calls from c++ program
}
Qu'est-ce que je fais mal? J'ai effectivement désactivé le formulaire et juste en utilisant la fonction et les variables dans le cas où le problème est avec l'interface utilisateur (invoquer et ainsi de suite). Est-ce que quitter la fonction init C++ (le premier morceau de code) efface le Form1?
Il ne me laissera pas avoir un manche à une poignée, juste un pointeur vers une poignée. Je l'ai pour que je puisse appeler les fonctions de la forme d'autres fonctions – Hiperi0n
Aussi, il ne me laissera pas avoir des poignées comme variables globales, bizarre mais c'est la seule façon dont je l'ai fait fonctionner – Hiperi0n
Ensuite, je suppose que dès form1 sort du champ d'application, le GC en disposera. Que diriez-vous faire à la place et ensuite le supprimer manuellement? En fait, je ne l'ai pas fait moi-même, mais il y a des chances que je doive le faire dans un proche avenir, donc je suis curieux de savoir ce que vous avez découvert! :-) –