2 votes

Comment passer un délégué de rappel à une dll en .netCF ?

J'écris une application .netCF qui s'interface avec un scanner de codes-barres sur différentes plateformes matérielles. Par exemple, Motorola ou Intermec Etc. J'ai enveloppé leurs DLL avec l'une des miennes pour présenter une interface commune et je charge ma DLL au moment de l'exécution avec Reflection LoadFrom(), puis j'obtiens une référence de méthode.

Je suis capable de passer la plupart des paramètres aux méthodes de mon DLL, à une exception près. J'ai besoin de passer une fonction de rappel à la dll pour que, lorsqu'une lecture se produit, elle rappelle le programme principal pour traiter la lecture du code-barres.

Lorsque j'invoque la méthode, une ArgumentException se produit.

Ma question est la suivante : comment puis-je transmettre la référence de cette méthode à mon DLL ou existe-t-il une meilleure façon de le faire ?

    public delegate void ReadNotify(BCReadData readData);

    public void AttachReadNotify(ReadNotify ReadNotifyHandler)
    {
        if (type == ReaderType.UNKNOWN || scanIntf == null)
            return;
        try
        {
           setReadNotify.Invoke(scanIntf,new Object [] {ReadNotifyHandler});
        }
        catch (Exception e)
        {
            throw new Exception("Unable to set notify handler" + e.Message);
        }

    }

0voto

Groo Points 19453

Si votre callback natif utilise la convention d'appel __stdcall, vous pouvez réaliser cette opération en utilisant la fonction Marshal.GetFunctionPointerForDelegate méthode.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X