Appel c depuis c# / appel c# depuis c

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 552 fois - Téléchargée 17 fois

Contenu du snippet

Permet a une application C# de donner une fonction callback à une Dll en C, et à cette Dll d'appeler la callback à tout moment.

Source / Exemple :


//En C# :

        [DllImport("MA_DLL.dll", CallingConvention = CallingConvention.Winapi)]
        private static extern void GiveCallbackToC(MulticastDelegate Callback_P);

        private delegate void T_Callback(bool ParamExemple_P);
        private T_Callback CallbackDelegate;
        private void MaCallback (bool ParamExemple_P)
        {
        }

        public void UneFonctionCSharp()
	{
            CallbackDelegate = new T_Callback(MaCallback);
            GiveCallbackToC(CallbackDelegate);
        }

//En C :

        typedef void (__stdcall *T_CALLBACK) (bool ParamExemple_P);
        static T_CALLBACK MaCallback;

        void GiveCallbackToC(T_CALLBACK Callback_P)
        {
            MaCallback = Callback_P;      
        }

        void UneFonctionC()
        {
	    MaCallback (true);         //Appel de la callback C# depuis le C
        }

Conclusion :


A utiliser avec modération ;)

A voir également

Ajouter un commentaire Commentaires
salut a tous .j'ai commencer a apprendre la librairie windows.h et time.h mais je n'ai pas de tutoriel;
s'il vous plait envoyer moi un pdf. merci
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014
23 avril 2013 à 15:17
Il faut bien faire attention à faire le « new » sur la delegate.
Il faut aussi faire attention à conserver une référence de la CallbackDelegate (en tant que membre de la classe),
Pas de « GiveCallbackToC(new T_Callback(MaCallback)) », sinon la callback est nettoyée lorsque le garbage collector se réveille.

Dans le cas contraire, l’appel de la callback en C génére aléatoirement des « illegal instruction ».

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.