Hello,

J'ai l'erreur suivante :

Managed Debugging Assistant 'CallbackOnCollectedDelegate' has detected a problem in 'xxx.exe'.
Additional Information: A callback was made on a garbage collected delegate of type DLLNative!DlgMyDelegate::Invoke'. This may cause application crashes, corruption and data loss. When passing delegates to unmanaged code, they must be kept alive by the managed application until it is guaranteed that they will never be called.
mon scénario :
1) je fournis à la Dll native un pointeur de Callback sous la forme d'un delegate
Dans la fonction qui enregistre la callback je passe en argument directement le nom de fonction !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
MyClasseCtor()
{
DLLNative.RegisterCallBack(FunctionCallBack);
}
private void FunctionCallBack(decimal _Value)
{...}
2) ce delegate est appelé depuis la DLL native et l'erreur survient apres un temps variable (selon le GC je suppose)


Comme l'objet qui contient la fonction passé à la DLL native est toujours instancié et utilisé, je ne comprend pas comment ce pointeur peut etre nettoyé par le GC ??? Quel stratagème mettre en place ?

J'ai aussi essayé de stocker le delegate dans une variable de classe...meme problème.