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

C++/CLI Discussion :

Probleme de passage de string entre DLL win32 et projetC#?


Sujet :

C++/CLI

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Jayceblaster
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 420
    Par défaut Probleme de passage de string entre DLL win32 et projetC#?
    Bonjour a tous...

    Voila j'ai une DLLwin32 qui me renvoie une string (écrite en pascal) et j'ai un programme c# (je suis sous delphi2006) qui doit me récupérer cette string comme montré ci-dessous;

    la DLL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
     
    uses
      SysUtils,
      Classes,
      ShareMem;
     
    {$R *.res}
     
    function Phrase(): string;stdcall;
    begin
       Phrase := 'la phrase a envoyer';
    end;
     
     
    exports Phrase;
    le source C#:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
         //import de la fonction de DLL
         [DllImport("c:\\envoieString.dll")]
         private static extern string Phrase();
     
         string maPhrase = Phrase();  //récupèration de ma phrase
    Mais le probleme est que quand j'exécute le source C# j'ai une erreur d'exécution à la ligne "string maPhrase = Phrase(); "...j'ai l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    La référence d'objet n'est pas définie à une instance d'un objet
    J'ai ce problème que pour le type string et je ne comprend pas...

    Quelqu'un peut il m'expliquer ce qui se passe et m'expliquer ce que je dois faire?

    Merci d'avance pour l'aide

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Par défaut
    Salut !

    Tu fais l'import de ta dll dans la même classe que celle où tu l'utilises ?

    Sinon je ne connais pas trop le pascal mais j'ai l'impression que ta fonction ne renvoie pas "Phrase"... Je me trompe ?

    ++

  3. #3
    Membre éclairé Avatar de Jayceblaster
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 420
    Par défaut
    SesechXP à écrit:
    Tu fais l'import de ta dll dans la même classe que celle où tu l'utilises ?
    Je ne comprend pas ta question...

    SesechXP à écrit:
    Sinon je ne connais pas trop le pascal mais j'ai l'impression que ta fonction ne renvoie pas "Phrase"... Je me trompe ?
    ma fonction renvoie 'la phrase a envoyer' car en pascal quand tu ecris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function Phrase(): string;stdcall;
    begin
       Phrase := 'la phrase a envoyer';
    end;
    ca reviens à écrire en c#:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function string Phrase();
    {
       return "la phrase a envoyer";
    }
    Bon ben j'ai toujours pas compris pourquoi ça marche pas...

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Par défaut
    Ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //import de la fonction de DLL
    [DllImport("c:\\envoieString.dll")]
    private static extern string Phrase();
     
    string maPhrase = Phrase();  //récupèration de ma phrase
    Tout est dans la même classe ?

    Car comme la fonction de ta dll est en "private" elle est inaccessible depuis les autres classes.

    ++

  5. #5
    Membre éclairé Avatar de Jayceblaster
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 420
    Par défaut
    Oui

  6. #6
    Membre éclairé Avatar de Jayceblaster
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 420
    Par défaut
    personne ne peut me dire comment on peut assurer le passage de string de Win32 à .Net

Discussions similaires

  1. Passage d'objets entre DLL
    Par oodini dans le forum C++
    Réponses: 5
    Dernier message: 01/04/2009, 11h27
  2. Problème de passage de string entre DLL
    Par oodini dans le forum C++
    Réponses: 4
    Dernier message: 24/03/2009, 16h34
  3. Passage de valeurs entre dll en C++ vers visual basic
    Par martos dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 15/07/2008, 11h08
  4. Réponses: 1
    Dernier message: 16/03/2007, 15h28
  5. Passage de String à une DLL
    Par tsp dans le forum C++
    Réponses: 1
    Dernier message: 09/03/2006, 16h53

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