J'essaie de marshaler les structures suivantes de C++ à C# sur un programme Windows CE et compacter framework 2.0. J'ai beaucoup de difficultés avec le triage des cordes.Tableau de regroupement de structures de C++ à C# dans WinCE
Je possède ce C++ code:
#define Console_Parameters_MAX 50
struct AllParameters {
Parameter Parameters[Console_Parameters_MAX];
} ;
struct Parameter {
int Index;
int Id;
char Value[20];
};
extern "C" {
BOOL GetAllConsoleParameters(AllParameters *pItem);
}
et ce sont les C# code correspondant:
[StructLayout(LayoutKind.Sequential)]
public struct AllParameters {
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)]
public Parameter[] Parameters
}
[StructLayout(LayoutKind.Sequential)]
public struct Parameter {
public int Index;
public int Id;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public byte[] Value;
}
[DllImport("exemple.dll", SetLastError = true)]
public static extern bool GetAllConsoleParameters([MarshalAs(UnmanagedType.Struct)] ref AllParameters pItem);
et voilà comment je l'invoquons:
AllParameters item = new AllParameters();
if (AppAPI.GetAllConsoleParameters(ref item)) {
var array = item.Parameters;
}
Quand j'appelle le GetAllConsoleParameters j'ai l'exception NotSupportedException. J'ai essayé plusieurs configurations mais sans succès.
Quelqu'un peut-il nous conseiller sur la façon de l'atteindre?
Merci à l'avance
Quel est le message de l'éxéption? – cubrr
Un sttring est une classe et n'est pas équivalent au tableau char. Les tableaux de caractères IN C++ sont terminés par '\ 0'. Donc, dans C#, utilisez un octet [] au lieu d'un tableau char. – jdweng
Je n'ai pas utilisé C++ depuis longtemps, mais je suis assez sûr que 'char []' et 'string []' ne sont pas équivalents. Je pense que vous voudrez peut-être juste une chaîne dans votre code C#. – Sean