Bonjour,

J'essaie de faire un extern c d'une fonction que j'utilise après en c#

dans ma fonction je remplis un buffer de la taille BufferSize;

après je copie le contenu du buffer dans Data qui est passé en paramètre par la fonction.

ma fonction c contient les params suivant

Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
extern "C" {
int ReadSingleFrameBlocking_(unsigned short *Data,unsigned long BufferSize)
{
      Buf = (unsigned short*)malloc(sizeof(unsigned short)*BufferSize);
      /*ici je remplie le Buf*/
      /*apresje copie Buf dans Data*/
 
      for(int i=0;i<BufferSize;i++)
      {
           Data[i] = Buf[i];
      }
       return 0;
 
}
}

du coté de c# je fais

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
[DllImport("TestTADLL.dll", EntryPoint = "ReadSingleFrameBlocking_", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
        public static extern int ReadSingleFrameBlocking_(ref UInt16 Data,UInt32 BufferSize);
pour appeler la fonction je fait

Code : Sélectionner tout - Visualiser dans une fenêtre à part
res = ReadSingleFrameBlocking_(ref Data, BufferSize);
le but c'est de pouvoir exploiter les données du Data dans c# après avoir été remplie par le code C

mais je n'arrive pas à récupérer les informations dans Data ca me renvoi une erreur
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
si quelqu'un à une idée merci d'avance.