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 :

probleme link dll


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Par défaut probleme link dll
    Bonjour,

    j'essaie de linker une dll écrite en fortran avec un exe en C++.
    Ma dll s'appelle DDL.dll et contient une routine qui s'appelle Flash.

    Cette routine prends en entrée 5 paramètres :
    -N1 = entier codé sous 2 octets
    -N2 = vecteur d entiers de taille 30 codés sous 2 octets
    -N3 = vecteur de réels de taille 30
    -N4 = un reel
    -N5 = un reel

    Et elle retourne 5 paramètres :
    -M1 = vecteur de réels de taille 30
    -M2 = vecteur de réels de taille 30
    -M4 = un réel
    -M5 = un entier codé sur 2 octets

    Dans les options de mon projet, j'ai bien ajouter dans l editeur de lien DDL.dll
    Mon code C++ est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    double* __declspec (dllimport) Flash(unsigned short int N1,short int* N2, double* N3, double N4, double N5);
     
    int main() {
        unsigned short int N1 = 9;
        short int N2[30];
        double N3[30];
        double N4 = 0;
        double N5 = 0;
        double* egal;
        egal = Flash(N1, N2, N3, N4, N5);
        return 0;
    }
    Quand je compile, j'ai ce message :
    undefined reference to `_imp__Flash'

    J'avoue ne pas comprendre, puisqu'il me semble avoir "tout bien fait".

    Si quelqu'un pouvait m'aider ce ne serait pas de refus.


    De plus, j'avoue ne pas trop voir comment récupérer les résultats de ma routine : elle renvoie 4 paramètres. Est-ce que je stocke tout dans un tableau que je "sépare" apres, ou est-ce que je peux récupérer les diférents paramètres directement (en déclarant une structure ou quelque chose dans le genre), je ne sais pas du tout comment ca se passe à ce niveau la avec le fortran.

    Je suis sous winXP et j use DevC++.

    ps : je ne suis pas sur non plus que les types que j'ai mis (unsigned int etc) soit les bons, si on pouvait me confirmer ...
    ps2 : je n'ai ni le .a ou .lib de la dll, ni le code source (mais la casse et la syntaxe sont bonnes)

    Merci d'avance.
    Kokocha

  2. #2
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    est ce que avec Devcpp il y a un .lib quand tu compiles la DLL ?
    si oui ajoute le aux dépendances de ton projet principale

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Par défaut
    ben ma dll est déja compilée et je n'ai pas le .lib ni le source...

    Mais si malgré cela il y a une méthode pour générer un .lib, je suis preneur

    Je ne sais même pas si cette erreur est du au link qui ne se fait pas ou à l'appel de la routine fortran...

    Parce que si c'est la routine fortran, est-ce que ca serait possible que ce soit les types qui ne lui conviennent pas (genre c'est pas les bons types donc il ne connait pas cette méthode)

  4. #4
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    visiblement c'est des ".a" qu'il faut que tu rajoutes au projet

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Par défaut
    Je pense avoir piger ou été le problème :

    dans le code dont je me suis inspiré pour faire le mien, le mec quand il crée sa dll, il déclare ses méthodes avec des (dllexport), ce que moi je n'ai pas fait bien sur (puisque ma dll est deja compilée)

    Je pense que le problème vient de la, si quelqu'un pouvait confirmer...

    Pour le reste, je crains devoir poster dans le forum lié au fortran à ce moment la ...

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Si tu n'as pas de .lib, tu peux essayer de linker manuellement à l'exécution avec LoadLibrary(), GetProcAddress() et FreeLibrary().

    --> Un exemple ici.

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

Discussions similaires

  1. Probleme sur DLL & VCL
    Par Romain² dans le forum Langage
    Réponses: 4
    Dernier message: 03/04/2006, 18h10
  2. Probleme: recompilation DLL en VB6 impossible
    Par balibo dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 04/11/2005, 10h16
  3. Link DLL
    Par lenouvo dans le forum MFC
    Réponses: 7
    Dernier message: 08/08/2005, 16h27
  4. [CR] Probleme avec Dll P2oledb.dll
    Par malban dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 30/08/2004, 09h10
  5. Probleme "linking nonincrementally"
    Par MissParker dans le forum C
    Réponses: 3
    Dernier message: 08/01/2003, 09h52

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