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++ Discussion :

utilisé string dans une dll c++


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 26
    Points
    26
    Par défaut utilisé string dans une dll c++
    Bonjour à tous
    j'ai un problème avec la création d'une dll avec c++
    pour créer les fonctions à exporté de dll si son type de retour est int ou void les types de c en général ça marche voir comme exemple
    Code c++:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    extern "C" int WINAPI getdatabase()
    {
    	res=c.GetDatabase(0,cdb);
    	 return(res);
     
    }
    mais si je veut utiliser un string comme type de retour pour le fonction j'ai se message d'erreur lors de la compilation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    warning C4190: 'getdatabase' a une liaison C spécifiée, mais retourne 'std::basic_string<_Elem,_Traits,_Ax>' UDT qui est incompatible avec C
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>,
                _Ax=std::allocator<char>
            ]
    Merci pour vos aides

  2. #2
    Nouveau membre du Club
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    voir le code avec string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    extern "C" std::string WINAPI getdatabase()
    {
    	std::string ch="kld";
    	//res=c.GetDatabase(0,cdb);
    	 return(ch);
     
    }

  3. #3
    Membre régulier Avatar de thoratou
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 57
    Points : 116
    Points
    116
    Par défaut
    change le extern "C" par extern

    std::string n'existe pas en C
    Screen (SCalable REndering ENgine) : moteur 3d en développement

    There are only two things wrong with C++: The initial concept and the
    implementation.
    Bertrand Meyer

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    si j'ai la modifier mais une erreur lors de l'utilisation de dll avec java jna
    j'ai la testé avec le type de retour int avec java dll marche mais pour string il m'affiche
    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
    A fatal error has been detected by the Java Runtime Environment:
    #
    #  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x10004768, pid=2436, tid=3500
    #
    # JRE version: 6.0_18-b07
    # Java VM: Java HotSpot(TM) Client VM (16.0-b13 mixed mode, sharing windows-x86 )
    # Problematic frame:
    # C  [jna8751411624704296542.dll+0x4768]
    #
    # An error report file with more information is saved as:
    # D:\salah\Project\Testjna\hs_err_pid2436.log
    #
    # If you would like to submit a bug report, please visit:
    #   http://java.sun.com/webapps/bugreport/crash.jsp
    # The crash happened outside the Java Virtual Machine in native code.
    # See problematic frame for where to report the bug.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour l'interopérabilité, j'ai tendance à préconiser les BSTR (bien que VB fasse des bêtises avec si l'on n'est pas dans un objet COM) ou bien comme Windows, les tableaux de caractères passés en paramètre.

    Est-ce que JNA accepte les BSTR?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Codeguard dans une DLL utilisé par du code managé
    Par Volfoni dans le forum C++Builder
    Réponses: 0
    Dernier message: 06/11/2008, 17h06
  2. passer une string dans une DLL C++ (pas VC++)
    Par me_myself dans le forum Visual C++
    Réponses: 3
    Dernier message: 01/10/2007, 11h09
  3. Réponses: 4
    Dernier message: 11/04/2007, 12h49
  4. Réponses: 7
    Dernier message: 25/11/2005, 17h11

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