J'essaye d'appeler une fonction C++ non managée, qui a une structure en tant que paramètre d'entrée. La structure est définie dans le fichier d'en-tête comme ceci:Marshaling un tableau de char de longueur fixe bidimensionnel C++ en tant que membre de structure
struct MyStruct
{
int siOrder;
char aaszNames[6][25];
int siId[6];
int siTones[6];
};
J'ai essayé de déclarer la struct gérée comme suit:
[StructLayoutAttribute(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public struct MyStruct {
public int siOrder;
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst=150)]
public string aaszNames;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst=6, ArraySubType=UnmanagedType.I4)]
public int[] siId;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst=6, ArraySubType=UnmanagedType.I4)]
public int[] siTones;
}
Mais sans succès. Je devine que le marshaling échoue, puisque le aaszNames est en fait un tableau de six longues chaînes de terminaison nulle. Je essayé de déclarer aaszNames comme
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst=150)]
public char[] aaszNames;
remplir le tableau avec les valeurs NULL si nécessaire. Mais, encore une fois, rien.
Y a-t-il quelque chose qui me manque? Qu'est-ce que je me trompe? Quelle est la meilleure façon de rassembler cette matrice de caractères 2D?
Des indices, s'il vous plaît.
Ca ne ressemble pas du tout au C++ ... –
Il veut appeler une fonction C++ de C# –
J'ai ajouté une balise C# pour clarifier, je l'espère, ce que l'on veut dire. Je pensais aussi que c'était une pure question C++ jusqu'à ce que j'arrive au code. – Yacoby