J'ai un problème qui est également lié aux messages AppDomain et Windows.AppDomain et messages de fenêtre natifs
Une page Web hébergée dans Internet Explorer qui contiendrait un contrôle dérivé de .Net WinForms UserControl - HelloWorldCtl. Ce contrôle est à l'intérieur d'un assembly écrit C# - HelloWorldControl.dll. Le contrôle utilise le code d'un autre assembly écrit en C++/CLR - HelloWorldLibCPP.dll.
HelloWorldCtl charge HelloWorldLibCPP.dll et appelle du code qui crée une fenêtre native Win32 et place cette fenêtre dans la zone HelloWorldCtl.
Accédez à la page Web, les charges HelloWorldCtl, je peux le voir ainsi que la fenêtre native au centre de la zone de HelloWorldCtl.
Le contrôle C# et la fenêtre native ont tous deux des gestionnaires de messages et les messages fonctionnent correctement et atteignent à la fois la fenêtre du contrôle C# et la fenêtre native; clics de souris, re-peintures et ainsi de suite ... Cependant, certains des gestionnaires de messages de la fenêtre natif ont besoin d'appeler des méthodes sur le contrôle C# qui est le parent de la fenêtre native. Ceci est fait en utilisant une interface que le contrôle C# implémente et à laquelle la fenêtre native contient une référence en la stockant dans un GCHandle (à partir de System :: Runtime :: InteropServices.) J'ai utilisé le template gcroot <> pour le GCHandle.
L'échec se produit à ce stade lorsque le code dans la fenêtre native essaie d'utiliser le GCHandle pour appeler n'importe quelle méthode sur le contrôle C#. (Le C++ code est compilé en code managé avec/clr.)
L'exception qui est levée est:
"ne peut pas passer un GCHandle à travers AppDomains"
je mets un code de débogage pour afficher l'ID et FriendName du CurrentDomain à la fois dans le C# et la fenêtre native et j'ai découvert que ces AppDomains ne sont pas les mêmes.
Lors de la création de la fenêtre native, CurrentDomain est identique à celui du contrôle C#, mais lorsque la fenêtre native reçoit des messages et que ces messages sont gérés, CurrentDomain est différent des contrôles C#.
Cette situation peut-elle être modifiée? Est-il possible que les deux messages de la fenêtre native soient exécutés dans le même AppDomain que celui du contrôle C#?
D'autres suggestions peut-être?
Merci, Roger
Si quelqu'un est prêt à répondre, je serais intéressé par les réponses. – IAbstract