J'essaie d'obtenir une application C# WPF pour communiquer avec une autre application écrite en C à l'aide de WM_COPYDATA. L'application C tente d'envoyer un struct comme suit:Structures de regroupement à partir de messages WM_COPYDATA
typedef struct
{
int x;
int y;
char str[40];
double d;
char c;
} DATASTRUCT;
Dans mon application C# J'ai défini une struct comme suit:
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public struct DATASTRUCT
{
public int x;
public int y;
[MarshalAs(UnmanagedType.LPStr, SizeConst=40)]
public string s;
public double d;
public char c;
};
Et le code pour recevoir le message WM_COPYDATA est la suivante: Je reçois des messages de l'application C, mais toutes les données dans la structure sont charabia. Avant cela, j'étais capable d'extraire manuellement un tableau d'octets à partir du pointeur lParam, puis d'utiliser System.BitConverter et System.Text.Encoding.ACII pour interpréter le tableau d'octets, et cela a plutôt bien fonctionné. Mais maintenant j'essaie de le faire d'une manière plus propre et ça ne marche pas.