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 :

Dll sans decoration


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Ingénieur système
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur système

    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut Dll sans decoration
    bonjour à la communauté

    pour le pb suivant il y a pas mal de post mais rien ne fonctionne
    et les infos sont souvent tronquées

    mon pb :
    j'ai programmé sous codeblocks (nouvelle version) une dll qui est utilisée avec VB6
    elle fonctionne sans pb mais je ne veux pas de fonctions décorées avec le @
    exemple : HelloWorld@0

    je veux : HelloWorld

    ----------------------------------------------
    Dans ma Dll j'ai par exemple :

    #define export __declspec (dllexport)

    export void __stdcall HelloWorld();

    void HelloWorld(){

    // ce qu'on veut

    }
    ----------------------------------------------
    Dans mon fichier.def qui se créer automatiquement j'ai :

    EXPORTS
    HelloWorld@0 @1

    ----------------------------------------------
    j'ai lu dans des post de faire ce qui suit (ce que j'ai fait) et de mettre dans linker settings des options (jamais les mêmes !!! grrrrrrrrr)

    De mettre dans le fichier.def :

    EXPORTS
    HelloWorld=HelloWorld@0 @1
    ----------------------------------------------
    mais dans ma Dll ca ne change rien j'ai toujours des fonctions décorées

    quelqu'un a t-il une solution claire et efficace sans bla bla que ca serve aussi aux autres

    merci d'avance

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Exporter avec __declspec(dllexport) active automatiquement la décoration de nom. Enlève tous tes "export" et exporte les fonctions avec un fichier def créé manuellement.
    Plus de précisions sont données dans ce tutoriel.

  3. #3
    Membre confirmé
    Profil pro
    Ingénieur système
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur système

    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut
    merci pour la réponse Melem (avec un peu de retard)
    je recommande le lien que tu donnes

    pour être tout à fait complet voici tout en détail

    1 - dans codeblock vous créez votre dll : maddl.dll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <windows.h>
     
    void __stdcall HelloWorld();
     
    void __stdcall HelloWorld(){
     
    // ce qu'on veut
     
    }
    2 - vous créer un fichier.def avec le notepad
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    LIBRARY madll.dll
     
    EXPORTS
    HelloWorld=HelloWorld@0
    !!! si vous passez la fonction seule vous avez un warning

    3 - pour que codeblock prenne en charge le fichier.def il faut :

    Ajouter dans le menu "Project"/"Build options" onglet "Linker settings" cadre "Other linker options" la commande "-d fichier.def"

    4 - vous compilez

    5 - placez la dll dans \windows\system32\
    sinon en VB interprété il faut, dans les fonctions, passer le chemin complet de la dll

    6 - dans VB6 on va donc utiliser les fonctions sans décoration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Declare Sub HelloWorld Lib "madll.dll" ()
    !!! par contre on ne se débarrase pas dans la dll d'une copie des fonctions avec les décorations

    si quelqu'un sait comment s'en débarasser complètement pour la confidentialité je suis preneur ?

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    En fait, il y a aussi une autre erreur que je n'ai pas vu : la convention d'appel doit être renseignée dans la déclaration ET la définition.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void __stdcall HelloWorld(void);
     
    void __stdcall HelloWorld(){
     
    // ce qu'on veut
     
    }
    De plus, la déclaration ici n'est pas obligatoire.

    Voilà, tout doit être réglé maintenant .

Discussions similaires

  1. DLL sans .DEF ou .LIB
    Par ZJP972 dans le forum C
    Réponses: 3
    Dernier message: 05/07/2007, 21h40
  2. Utiliser un DLL sans .LIb et sans .DEF
    Par ZJP972 dans le forum Dev-C++
    Réponses: 1
    Dernier message: 05/07/2007, 21h39
  3. Appel de DLL sans .DEF ou .LIB
    Par ZJP972 dans le forum C++
    Réponses: 5
    Dernier message: 05/07/2007, 21h35
  4. [D7] Comment choper un event à partir d'1 dll sans DispID
    Par raoulmania dans le forum Langage
    Réponses: 1
    Dernier message: 26/10/2005, 18h22
  5. [VB6]ouvrir une DLL sans en conaitre le nom à la creation
    Par victorracine dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 05/02/2004, 15h16

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