Bonjour,
Si on a converti un delegate en pointeur de fonction avec le marshalleur du Runtime, est-ce qu'on a besoin de mettre un pointeur épingle quelque part, ou le marshalleur le fait tout seul ?
Merci beaucoup
Version imprimable
Bonjour,
Si on a converti un delegate en pointeur de fonction avec le marshalleur du Runtime, est-ce qu'on a besoin de mettre un pointeur épingle quelque part, ou le marshalleur le fait tout seul ?
Merci beaucoup
Pas sur de ton comprendre avec ton histoire de pointeur épingle: tu peux réexpliquer (avec du code éventuellement) ?
Bonjour.
Tu veux sans doute parler d'utiliser une instance de ta fonction delegate quand tu parles de "pointeur épingle".
Donc si c'est le cas, c'est oui car sinon tu encours le risque d'un gros méchant CallbackOnCollectedDelegate --> le garbage collector a tout simplement ramassé le pointeur du delegate, celui-ci n'étant pas formellement positionné dans le code managé.
Edit : ah ben non, on dirait du C++ d'aprés la FAQ :
http://dotnet.developpez.com/faq/cpp...nteriorpointer
Cdt.
Merci beaucoup à vous d'avoir répondu, et désolé de répondre si tard.
En fait c'est précisément ce que tu disais olsimare. Le problème était que j'avais une méthode managée (C#), sur laquelle je prenais un delegate.
Ensuite, je le marshallais en un pointeur de fonction natif, et je le passais à un thread natif, qui l'appelait quand il voulait.
Ce que je ne comprenais pas était que je finissais effectivement, au bout d'un temps variable, par avoir un CallbackOnCollectedDelegate sur cette méthode. Or comme je l'avais marshallé, je pensais que le marshalleur mettait (en quelque sorte) un pointeur épingle sur le delegate, afin qu'il soit toujours ne soit pas déplacé ou collecté. En fait il finissait par sortir du scope, donc il était libéré (mais ça je l'ai compris très tard :d).
J'ai du coup utilisé cet article pour m'en sortir : http://msdn2.microsoft.com/fr-fr/lib...e0(VS.80).aspx
Voila, donc c'est juste que je suis un boulet :)
Merci beaucoup !