Hello,
J'ai l'erreur suivante :
mon scénario :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.
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 !
2) ce delegate est appelé depuis la DLL native et l'erreur survient apres un temps variable (selon le GC je suppose)
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) {...}
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.
Partager