je la structure suivante dans mon fichier cpp:passer un struct C++ à l'application aC#
struct EntityData
{
char globalId[512];
int mySpeed;
double x;
double y;
double z;
double h;
double p;
double r;
};
J'ai une méthode qui obtient un # index et retourne la structure correcte:
extern "C" { __declspec(dllexport) getDataStruct(int index)
cette méthode est exposée afin que je puisse utiliser cette méthode dans mon application C# et je continue à obtenir une erreur:
marshal directive exception.
mon code C#:
[DllImport("my64.dll")]
[return: MarshalAs(UnmanagedType.LPStruct)]
public static extern EntityDataRx getDataStruct(int index);
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct EntityDataRx
{
[MarshalAs(UnmanagedType.LPStr, SizeConst = 512)]
StringBuilder globalId;
int mySpeed;
double x;
double y;
double z;
double h;
double p;
double r;
}
Que manque-t-il?
Avez-vous essayé 'char []' ou 'CHAINE' au lieu de 'StringBuilder'? –
Essayé les deux mais cela n'a pas fonctionné, même exception – KBE
Essayez avec 'UnmanagedType.ByValArray' ou' ByValTStr' et 'char []'. 'LPStr' devrait être utilisé avec' char * 'alors peut-être que cela va résoudre le problème. –