Je suis vraiment confus par la multitude d'informations erronées sur l'interopérabilité native/gérée.Appel d'un rappel natif à partir du code .NET géré (lors du chargement du code managé à l'aide de COM)
J'ai un C++ exe régulier qui n'est pas construit en utilisant CLR stuff (ce n'est ni Managed C++ ni C++/CLI et ne le sera jamais). Ce C++ exe est "en charge", il n'y a pas de wrapper géré pour cela.
Je voudrais accéder à du code que j'ai dans un assembly C# de mon exe C++. Je peux accéder à l'assembly C# à partir de mon code C++ en utilisant COM. Cependant, lorsque mon code C# détecte un événement, je voudrais le rappeler dans mon code C++. Le pointeur de la fonction C++ à rappeler sera fourni lors de l'exécution. Notez que le pointeur de fonction C++ est une fonction trouvée dans l'environnement d'exécution de l'exe. Il peut utiliser des membres statiques à partir de là. Je ne veux pas que le code managé essaie de charger une DLL pour appeler une fonction (il n'y a pas de DLL). Comment puis-je transmettre ce pointeur de fonction C++ à mon code C# via COM/.NET et que mon code C# appelle avec succès?
Merci!
A l'étape 2, le pointeur de fonction arrivera-t-il initialement dans C# -land en tant que IntPtr? – evilfred
Pour obtenir le pointeur de C/C++ à C#, il sera marshalé. Oui, les pointeurs C/C++ sont représentés par un C# IntPtr dont la taille est spécifique à la plate-forme. –
Je fais probablement quelque chose de stupide. Le compilateur C++ se plaint qu'il ne peut pas convertir mon paramètre de voic (__ cdecl *) (UINT) en long (la méthode prend un IntPtr en C#). En outre, l'exemple de Zhang implique un pointeur de fonction C++ récupéré en C# et non récupéré en C++ ... – evilfred