Problème C# et code unsafe

Signaler
-
 Utilisateur anonyme -
Salut, j'ai un petit problème à vous soumettre !
Voilà pour charger une strcuture j'aimerai utiliser l'a fonction fopen du C et C++
J'effectue donc un import dans le C#.
Au moment où je veux lire les données du fichier, j'ai une erreur 'Tentative de lecture ou d'écriture de mémoire protégée' , comme si j'on avais un comflit entre mon code managé et non managé ... je ne pense pas que ce soit le cas ?
Si quelqu'un a eu le même problème, je suis preneur de la solution.
Merci d'avance.

Mon code:

[System.Runtime.InteropServices.DllImport("msvcrt.dll", SetLastError = true)]
static extern unsafe int fopen(String filename, String mode);
[System.Runtime.InteropServices.DllImport("msvcrt.dll", SetLastError = true)]
static extern unsafe int fclose(int hStream);
static extern unsafe int fread(void* buffer, long size, long count, int hStream);
[System.Runtime.InteropServices.DllImport("msvcrt.dll", SetLastError = true)]

private struct Pos {
    public int X;
    public int Y;
}

private unsafe int FileRead(int hStream, void*p buffer, int size)
{
   try {
         //// Provoque une erreur ????????
         return fread(buffer, 1, size, hStream);
   }
   catch {
         ///// -------> Erreur: 'Tentative de lecture ou d'écriture de mémoire protégée'
         return -1;
   }
}

//   Fonction principale
private void  Load()
{
     unsafe {
         int file;

         file = fopen("Toto.dat", "r");

         if (file != 0) {

              fixed (void* p = &pos) FileRead(file, p, sizeof(Pos));
              fclose(file);
         }
     }
}

3 réponses


Dans la fonction principale j'ai oublié de vous signalez:


private void Load(){

    unsafe {

      Pos pos;

      ............;
      ............;
     }
}
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Salut, dans le prototype de fread remplace les long par des int ( sur une platform Win32 ).

c'était juste çà !  lol
en tout cas merci çà marche.