IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] passage de paramètres par référence


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Points : 320
    Points
    320
    Par défaut [C#] passage de paramètres par référence
    Salut,

    Je développe une application en C# qui appelle des fonctions d'une DLL écrite en C. Une fonction de ma dll attend en argument un pointeur sur une structure.

    Depuis mon application C# je passe le paramètre par référence à l'aide de "ref". Mais le problème c'est que la fonction de ma dll modifie la structure et j'ai le message d'erreur suivant : "Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée."

    Je pense comprendre ce qui se passe, c'est que ma structure est protégée des modifications externes (arrêtez moi si je me trompe).

    Comment puis-je faire ?

    Merci.

    ++

  2. #2
    Invité
    Invité(e)
    Par défaut
    Je pense que le probleme vient du fait que ta DLL doit être e mode UNSAFE et cela provoque une erreur au niveau de ton appli c#.
    Regardre ici je pense que tu auras d'avantage d'info
    http://msdn2.microsoft.com/fr-fr/library/t2yzs44b.aspx

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Points : 320
    Points
    320
    Par défaut
    Merci de prendre du temps pour m'aider

    J'ai déclaré ma méthode comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [DllImport("\\dll\\parameter.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern unsafe void parameter__get_fields
    (
         int item_number,
         ref parameter_t parameter
    );
    Puis voici l'appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    unsafe
    {
         parameter_c.parameter__get_fields(0, ref parameter[0]);
    }
    J'ai également autorisé le unsafe au niveau du compilateur, mais j'ai toujours un "access violation"...

    ++

  4. #4
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Essaye ça :
    * créer une nouvelle instance de ta structure (en local dans ta méthode)
    * recopier le contenu de la structure que tu veux passer en paramètre
    * appeler ta méthode avec ta structure 'locale'
    * après l'appel, recopier le contenu qui est retourné dans ta structure initiale

Discussions similaires

  1. Passage de paramètre par référence
    Par sat83 dans le forum C++Builder
    Réponses: 13
    Dernier message: 15/05/2009, 21h04
  2. Réponses: 8
    Dernier message: 09/08/2007, 17h34
  3. Passage de paramètres par référence
    Par margagn dans le forum Framework .NET
    Réponses: 2
    Dernier message: 08/05/2007, 23h08
  4. [POO] Passage de paramètre par référence.
    Par abidi_niz dans le forum Langage
    Réponses: 3
    Dernier message: 12/10/2006, 12h20
  5. [EJB] Passage des paramètres par référence
    Par salome dans le forum Java EE
    Réponses: 2
    Dernier message: 05/07/2005, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo