Je rencontre un problème avec le contenu d'un pointeur transmis car le wParam d'une application C# 32 bits est en cours de modification vers un processus C++ 64 bits.Paramètres PostMessage de C# à 32 bits C++
Il existe deux processus 32.exe (en C#) et 64.exe (en C++). 64.exe est démarré en tant que processus fils de 32.exe. Message de la fenêtre de publication 32.exe pour 64.exe, dont l'un a un wParam qui est un pointeur vers un tableau de structures RECT. Les deux 64.exe et 32.exe ont un DLL commun (écrit en C++, mais compilé pour différentes plates-formes, bien sûr), appelé 32.dll et 64.dll.
Une fonction qui attend un RECT * dans 32.dll est appelée directement à partir de 32.exe avec le même RECT * qui est postée ultérieurement, et cela fonctionne bien. Ensuite, il affiche un message à 64.exe, qui appelle la même fonction et jette le wParam à rect *:
else if (WM_SetDisabledAreas == message)
{
SetDisabledAreas((RECT*)wParam, (UINT)lParam);
}
Le message est affiché comme suit:
if (Is64Bit() && SubProcess64 != null)
{
Win32.PostMessage(SubProcess64.MainWindowHandle, WindowMessages.SetDisabledAreas,
(uint)pointer.ToInt32(), length);
}
MessageBox.Show(pointer.ToString());
DLL32.SetDisabledAreas(pointer, length);
Par débogage J'ai validé que le message est reçu, mais l'adresse wParam n'est pas la même qu'avant. Ce n'est pas inattendu, mais le contenu de la mémoire vers laquelle il pointe maintenant est indéfini (et j'obtiens une violation d'accès en essayant de voir ce qui est là).
Que se passe-t-il ici?
Pouvez-vous ajouter une source qui inclut comment votre variable de pointeur est initialisée? – Jason
Exactement comme dans cette question: http://stackoverflow.com/questions/1086294/convert-array-of-structs-to-intptr –
Le problème se produit si vous utilisez SendMessage? – Jason