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 :

problème dllImport avec tableau de char[] en paramètre E/S


Sujet :

Windows Forms

  1. #1
    Débutant
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Points : 324
    Points
    324
    Par défaut problème dllImport avec tableau de char[] en paramètre E/S
    Bonjour à tous,

    Je dispose d'une dll codé en C.
    Celle-ci contient une fonction qui est censé me retourner un tableau de char.

    Voici comment se présent la fonction dans le .h de la dll :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            unsigned short Exchange (unsigned short usNumID,
                            char*          pcResp,
                            unsigned long* pulSizeResp)
    Voici maintenant, ce que j'ai fais dans mon application c# :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            [DllImport("cardw32.dll"]
            public static extern ushort Exchange(ushort usNumID,
                                        string       pcResp, 
                                        ref ulong   pulSizeResp);
    Voici comment je l'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            static void Main(string[] args)
            {
                ulong status = 0;
                ulong sizeResp = 256;
                ushort num = 3;
                StringBuilder respStr2 = new StringBuilder((int)sizeResp);
     
                status = Exchange(num,
                                    respStr,
                                    ref sizeResp);
     
                Console.WriteLine("Echange - status = " + status.ToString() + " sizeResp = " + sizeResp.ToString());
                Console.WriteLine("String = " + respStr);
    Malheureusement pour moi ca ne fonctionne pas, je récupère bien une longueur (pulSizeResp), mais rien dans ma string.
    Je n'ai pas réussi à lui passer un char[] (marche pas avec "ref")
    J'ai déja cherché sur le site, mais rien de concluant chez moi ... (stringBuilder NOK, liens pages Morpheus NOK)

    Si quelqu'un à une idée je suis prenneur.

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu es sûr que ça marche pas avec le StringBuilder ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            [DllImport("cardw32.dll"]
            public static extern ushort Exchange(ushort usNumID,
                                        StringBuilder pcResp, 
                                        ref ulong   pulSizeResp);
    ...
     
    status = Exchange(num,
                                    respStr2,
                                    ref sizeResp); 
     
    respStr = respStr2.ToString();

  3. #3
    Débutant
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Points : 324
    Points
    324
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Tu es sûr que ça marche pas avec le StringBuilder ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            [DllImport("cardw32.dll"]
            public static extern ushort Exchange(ushort usNumID,
                                        StringBuilder pcResp, 
                                        ref ulong   pulSizeResp);
    ...
     
    status = Exchange(num,
                                    respStr2,
                                    ref sizeResp); 
     
    respStr = respStr2.ToString();
    Oui sur et certain .
    Justement c'est ca qui me dérange, c'est qu'a priori ca devrait marcher.

    Peu etre est-ce du au message d'erreur qui apparait une fois l'executable lancé.
    Mais le hic, c'est que la suite de l'execution se fait bien, le problème est uniquement lié à ce char[].

    voici le message d'erreur :
    L'instruction à "0x00c7b222" emploie l'adresse mémoire "0x00c9e9c". la mémoire ne peu pas être "read"

    Peu etre y-a-t-il un rapport.

    Merci Tomlev pour ton aide.

    Si t'a une autre piste à exploiter , je suis prenneur

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    essaye avec ce genre de paramètre pour les char*

    [MarshalAs(UnmanagedType.LPStr)] StringBuilder tonparametrechar

    C'est comme ça que j'ai résolu le même genre de problème

  5. #5
    Débutant
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Points : 324
    Points
    324
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    essaye avec ce genre de paramètre pour les char*

    [MarshalAs(UnmanagedType.LPStr)] StringBuilder tonparametrechar

    C'est comme ça que j'ai résolu le même genre de problème
    Merci Papy214, mais malheureusement pour moi c'a ne donne rien du tout, ma chaine de caractère (stringBuilder) reste vide.

Discussions similaires

  1. utilisation fprintf avec tableau de char
    Par damdam78 dans le forum C++
    Réponses: 2
    Dernier message: 19/05/2009, 12h30
  2. Un tableau de char* en paramètre template
    Par Florian Goo dans le forum Langage
    Réponses: 20
    Dernier message: 02/10/2008, 03h00
  3. [Tableaux] Problème divers avec tableau
    Par fourniey dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2008, 01h04
  4. Pb avec tableau de char
    Par tintin72 dans le forum C++
    Réponses: 2
    Dernier message: 09/11/2007, 13h13
  5. Problème site avec tableau
    Par liljerem dans le forum Balisage (X)HTML et validation W3C
    Réponses: 14
    Dernier message: 07/06/2007, 18h51

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