dark_naruto25
Messages postés127Date d'inscriptionmardi 23 août 2005StatutMembreDernière intervention 9 mai 2011
-
7 sept. 2010 à 18:11
dark_naruto25
Messages postés127Date d'inscriptionmardi 23 août 2005StatutMembreDernière intervention 9 mai 2011
-
8 sept. 2010 à 11:58
Salut à tous !
Voilà mon souci, pour le boulot je dispose d'un DLL (conçu en C) que je dois initialisé depuis mon code C#.
Ma structure ressemble à quelque chose comme ça :
public unsafe struct messageQueueInfo_ts
{
public bool unBooleen;
public fixed byte unNom[NAME_MAX_SIZE];
public int level;
public fixed int ids[MAX_ID_NUMBER];
}
Lorsque j'initialise cette structure (juste avant le passage en paramètre), depuis un bloc unsafe je copie les caractères du nom et les "ids".
Je peux débugguer la DLL pour voir que les champs sont tous à 0. Quand je visualise le pointeur reçu, j'aperçois le nom dans l'était mémoire. Mais quand je veux regarder précisément le tableau de caractère, celui-ci pointe sur une adresse qui correspond à la concaténation de mes caractères.
Quelqu'un aurait-il un indice ? un même un lien correcte pour gérer ce genre de structure complexe ?
dark_naruto25
Messages postés127Date d'inscriptionmardi 23 août 2005StatutMembreDernière intervention 9 mai 2011 8 sept. 2010 à 11:58
Voilà du nouveau. Je tente toujours de passer un tableau de structure à la DLL écrite en C (que je peux débugger, mais pas modifier).
La structure ressemble à ceci :
[StructLayout(LayoutKind.Sequential)]
public struct MaStructure
{
public bool unBool;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = NAME_MAX_SIZE)]
public byte[] name;
public int nbr;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_NUMBER)]
public int[] listID;
}
La fonction de la DLL prendre en paramètre un MaStructure* (pour le tableau).
Le premier souci que j'ai obtenu est qu'il ne peut pas prendre de pointeur sur un type managé. J'ai donc voulu faire du Marshalling pour récupérer des pointeurs non managé :