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 :

[C++ .NET] Pourquoi ai-je une erreur édition de liens lors de l'appel à ma dll ?


Sujet :

C++/CLI

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 19
    Points : 13
    Points
    13
    Par défaut [C++ .NET] Pourquoi ai-je une erreur édition de liens lors de l'appel à ma dll ?
    Bonjour,

    j'essaie d'utiliser une dll mais je n'arrive pas à exécuter mon code, il y a des erreurs à l'édition de liens.
    Je pense qu'il est possible que je n'utilise pas les bons types de paramètre.

    Le prototype de la fonction est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int spssGetVarHandle (int handle, const char *varName, double
     *varHandle)
    Et j'essaie de l'utiliser de cette façon:
    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
    18
    19
    20
    21
    22
     
        int hSpssFile;
        Double hVariable;
        int returnCode;
        SpssWrapper *sw = new SpssWrapper();
     
        char* spssFile = (char*)(void*)Marshal::StringToHGlobalAnsi(config
    ->dataFile);
     
        try
        {            
            returnCode = sw->spssOpenRead(spssFile, &hSpssFile);
     
            for each(Collections::DictionaryEntry DE in allVars)
            {
                char* spssVarName = (char*)(void*)
    Marshal::StringToHGlobalAnsi(DE.Key->ToString());
     
                returnCode = sw->spssGetVarHandle(hSpssFile, spssVarName,
     &hVariable);
            }
       }
    A la compilation aucun problème mais à l'édition de liens j'ai des erreurs dues à spssGetVarHandle(). La méthode spssOpenRead fonctionne trés bien toute seule.

    Est-ce une erreur sur le type des paramètres?

    J'ai pas vraiment l'habitude de manipuler les dlls et encore moins avec du dotnet car je débute la dedans.

    Si vous avez besoin de plus d'informations je vous les fournirez.

    Merci

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    c'est une dll classique ? elle doit avoir été fournie avec un .lib qu'il faut rajouter à l'édition de liens, soit dans les paramètres, soit par pragma
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #pragma comment (lib, "nomdelalib.lib")

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    En effet il y avait bien un .lib avec, je l'ai donc copié dans le dossier oú se trouvent mes sources et ajouter le pragma mais j'ai toujours des problèmes à l'édition de liens:

    error LNK2001: unresolved external symbol "public: int __clrcall SpssWrapper::spssGetVarHandle(int,char const *,double *)" (?spssGetVarHandle@SpssWrapper@@$$FQAMHHPBDPAN@Z)
    Je vois pas ce qui cloche...

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    peut-etre une histoire de convention d'appel
    c'est toi qui a développé la dll ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Non ce n'est pas moi qui l'ai développé. En fait c'est une dll qui est fournie avec le logiciel SPSS si tu connais, elle permet simplement de lire ou écrire dans des fichiers au format Spss.

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    juste un truc, ton application qui veut utiliser cette dll est bien une application managée ? (compilée avec /clr)
    je me doute bien que oui

  7. #7
    Membre habitué Avatar de deeal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 218
    Points : 169
    Points
    169
    Par défaut
    je ne sais pas si ca peut etre le probleme ou pas
    mais il n'y aurait un probleme de typage entre la Dll et ton code
    car un int sur C# , ce n'est pas la meme chose que dans le C++
    si la dll prends un Int (16 bits) ce que correspend a un short en C#

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    juste un truc, ton application qui veut utiliser cette dll est bien une application managée ? (compilée avec /clr)
    je me doute bien que oui
    Oui oui c'est bien une application managée, un projet winforms compilé avec /clr:pure.

    Il y a peut être un problème de type oui je ne sais pas... Ce qui m'étonne c'est que spssOpenRead passe sans provoquer d'erreur donc c'est possible que cela vienne des paramètres.

    Qu'en penses tu nico-pyright?

    Stop!

    Plus la peine de se creuser les méninges, j'ai trouvé un fichier .h qui doit certainement mieux définir les fonctions que ma classe spssWrapper car je n'ai plus de problème de link.
    Je l'avais déjà au début en fait et ça ne marchait pas car je n'avais pas inclu le .lib, j'ai donc réessayé de prendre ce fichier à la place de ma classe mais en incluant le .lib ce coup-ci et ça marche.

    Je suis donc un peu déçu de pas avoir été capable d'écrire un wrapper correctement ...

    Merci de vous être pencher sur la question en tout cas et surtout merci pour le pragma!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.Net] Pourquoi ai-je une erreur de syntaxe INSERT UPDATE ?
    Par zzzmoi dans le forum Accès aux données
    Réponses: 14
    Dernier message: 17/08/2006, 14h21
  2. [VB.Net] Pourquoi ai-je une Erreur SQL sur un update ?
    Par ndsaerith dans le forum Accès aux données
    Réponses: 3
    Dernier message: 03/08/2006, 11h32
  3. [VB.NET] Pourquoi ai-je une erreur avec GetResponse ?
    Par Arnaud_B dans le forum Services Web
    Réponses: 1
    Dernier message: 25/07/2006, 17h13
  4. [VB.Net] Pourquoi ai-je une erreur à l'exécution d'une requête ?
    Par zooffy dans le forum Accès aux données
    Réponses: 3
    Dernier message: 25/06/2006, 10h35
  5. [ADO.Net][Access] Pourquoi ai-je une erreur lors de l'Update ?
    Par nazimb dans le forum Accès aux données
    Réponses: 1
    Dernier message: 15/05/2006, 09h37

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