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 :

Je suis perdu avec le type *wstring d'une DLL C++


Sujet :

C++/CLI

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Je suis perdu avec le type *wstring d'une DLL C++
    Bonjour,

    Je veux accéder à une simple fonction d'une DLL C++. Voici la déclaration du fichier .h concernant cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define API_SPEC     __declspec(dllexport)
    void API_SPEC API_getApiVersion (std::wstring *version) //[out] API release ID
    Donc le paramètre de cette fonction est un pointeur vers une string qui contiendra le texte indiquant le numéro de version. Mon code VB.Net pour y accéder est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Class Form1
        <DllImport("C:\Api.dll", EntryPoint:="?API_getApiVersion@@YAXPAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@Z", CallingConvention:=CallingConvention.ThisCall, CharSet:=CharSet.Unicode)> _
        Public Shared Sub test(ByVal version As String)
        End Sub
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim laVersion As String = New String(" "c, 20)
            Call test(laVersion )
            MessageBox.Show(laVersion)
        End Sub
    End Class
    À l'exécution j'ai un message
    AccessViolationException was unhandled.
    J'ai essayé de passer ma variable 'version' en ByRef au lieu de ByVal mais ça ne règle rien. J'ai aussi essayé de passer un type StringBuilder au lieu du type string mais sans résultat.

    Qu'est-ce que je fais de pas correct?

    Merci

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Points : 6
    Points
    6
    Par défaut
    Je ne saurais trop te conseiller d'en rester au "C" pur sucre pour l'API de ta DLL, donc qq chose de ce genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void API_SPEC WINAPI API_getApiVersion (wchar_t* version, DWORD* Size);
    Où size est le nombre d'éléments de version, si version est NULL Size est retourné avec la taille nécessaire.

    voir peut être plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const wchar_t* API_SPEC WINAPI API_getApiVersion ();
    où tu prends soin que le pointeur renvoyé soit déclaré static dans la DLL

    Sinon à titre d'info, une string "à la Basic" n'a rien a voir avec une string "à la stl" qui elle même n'a rien à voir avec une string "à la Pascal", donc aucune chance que ton programme en l'état marche.
    A+

Discussions similaires

  1. Suis perdu avec le rejet 2.23 de mon app.
    Par pacosxm dans le forum XCode
    Réponses: 1
    Dernier message: 30/10/2012, 01h00
  2. [MySQL] Je suis perdu avec les encodages, accents et autres joyeusetés!
    Par fxbrg dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/09/2009, 08h43
  3. [D6] Lire sous D6 le type (char **) d'une DLL en C++
    Par nikoko34 dans le forum Langage
    Réponses: 6
    Dernier message: 10/10/2008, 17h14
  4. [ODBC] Je suis perdu avec ODBC
    Par Nowhere dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 19/05/2006, 08h50
  5. Réponses: 6
    Dernier message: 24/02/2005, 09h44

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