J'ai une fonction en C++ que j'ai exportée vers une DLL. I contient un pointeur struct comme l'un des paramètres. J'ai besoin d'utiliser cette fonction en C#, j'ai donc utilisé DLLImport pour la fonction et recréé la structure en C# en utilisant StructLayout. J'ai essayé de passer dans le paramètre using ref aussi bien que essayé Marshaling en utilisant MarshalAs (UnmangedType.Struct) et Marshal.PtrToStructure. Le paramètre ne passe toujours pas correctement.Passage d'un pointeur struct en tant que paramètre dans C#
Exemple:
[DllImport("testdll.dll")]
public static extern int getProduct(int num1, int num2, [MarshalAs(UnmanagedType.Struct)] ref test_packet tester);
Encore une friandise d'information, le struct contient un octet * var, qui je pense peut être la cause du problème en termes de passer le param ref. Des idées? Suis-je sur la bonne voie? Merci pour l'aide.
Merci à nobugz pour la réponse. Voici un exemple de la structure def:
//C# DEFINITION
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct test_packet
{
public UInt32 var_alloc_size;
public byte* var;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_TAG_LENGTH)]
public byte[] tag;
}
//ORIGINAL UNMANAGED STRUCT
typedef struct test_packet_tag
{
unsigned int var_alloc_size;
unsigned char *var;
unsigned char tag[MAX_TAG_LENGTH];
} test_packet;
[StructLayout (LayoutKind.Sequential, charset = CharSet.Unicode)] public struct test_packet { \t octet public * var; \t [MarshalAs (UnmanagedType.ByValArray, SizeConst = MAX_TAG_LENGTH)] \t public octet [] tag; \t public UInt32 var_alloc_size; // était non signé int en C } –
Oh Seigneur. Mettez-le dans votre question. Affichez également la déclaration non gérée de celui-ci. –