CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++] DLL

techslash
techslash
Niveau 8
04 février 2005 à 05:34:58

Bonjour à tous,

J´ai récemment entrepris d´améliorer ma compréhension en ce qui concerne ce qu´il y a dérrière les dlls et les " import libs".

J´en ai déjà fait quelques-uns avec VS . NET mais comme il n´y a que quelques cases à cocher et tout s´y fait tout seul, je n´ai pas appris grand chose.

J´aimerais trouver de la documentation qui couvre bien les prérequis pour obtenir un dll propre et les différentes conventions qui semblent être en fonction dans ce " domaine". De plus, j´aimerais trouver réponse aux petits détails qui manquent de clareté. Du genre, pourquoi faut-il un point d´entrée ? VS . NET en fait un automatiquement et j´ai pourtant fait des DLL fonctionnels sous Borland ( command-line gratuit) qui n´en avait pas.

Jusqu´à maintenant, je me casse énormément la tête... Quelqu´un aurait un site à me proposer ou l´envie incontrôlable d´écrire un cour dans le forum ( même si ce dernier point n´est pas probable :) ) ?

Merci !

techslash
techslash
Niveau 8
04 février 2005 à 17:34:38

Bon, je réalise que ma demande est un peu extravagante. Je vais donc préciser légèrement ( ce qui aura pour bénéfice de upper mon message) mon intention. Comme je le répète à chaque fois, je ne upperai pas ce post plus qu´une fois ( donc je ne le referai pas après ce message) -- question de ne pas être lourd.

J´ai beaucoup travaillé avec les DLLs et visual studio . NET. On coche une petite case qui dit " export symbols" et le compilo fait le dll avec une import lib par lui-même. C´est facile, c´est simple et c´est pratique.

Or, vous voyez, ma licence de VS . NET ne serait pas vraiment, disons, idéal pour " distribuer" quoique se soit ( il me fallait un truc bien fait et bien complet pour apprendre, j´ai décidé d´opter pour ça). Conséquemment, maintenant que je pense m´y connaitre légèrement plus en ce qui concerne le langage, je m´amuse à explorer des alternatives.

Avec Borland ( le command-line gratuit), je pouvais faire un dll qui faisait encore une fois tout lui-même ( ou à tout le moins qui fonctionnait sans les complications dont je vais traité au paragraphe suivant).

J´ai décidé d´essayer mingw ( on pourrait donc me reprocher de ne pas avoir voulu apprendre avec Dev-C++ mais, pour une raison que j´ignore, cette IDE me tape sur les nerfs -- je ne veux pas remettre en question les valeurs de quiconque ici, je sais que c´est une IDE bien appréciée par beaucoup). À chaque compile d´un DLL on me dit qu´il n´y a pas d´export definition file. Évidemment, le compilo en fait une de lui-même... ça ne me semble pas propre.

Le problème, c´est que je sais qu´une export definition file ça sert principalement à identifier les fonctions à exporter. Or, j´ignore toutes les normes qui tournent atour de l´exportation de fonction. J´ai lu quelques articles sur les décorations C++, sur extern " C" qui empêche c´est symbole et autre. Je crois même avoir compris que, avec une certain syntaxe, les def files ne sont pas nécessaires. Malheureusement, j´y comprends très peu, j´ai pas d´article ou de doc clair qui commence au départ de la question.

Donc, au final, je suis intéressé à apprendre à faire des DLLs proprement, avec tout ce qui s´y rattache et à éviter les automatismes préprogrammés et/ou toute alternative qui " marche quand même" sans être réellement propre.

Quelqu´un peut m´aider ?

Ruffi
Ruffi
Niveau 9
04 février 2005 à 18:10:40

Je ne peut que te montrer la porte,c´est à toi qu´il appartient de la franchir.

http://www.flipcode.com/articles/article_creatingdlls.shtml

( Oula... une nuit blanche a programmer et je me prend pour Morpheus... bon, j´ai un lapin blanc a poursuivre :fou: )

techslash
techslash
Niveau 8
04 février 2005 à 18:27:00

Merci Ruffi!

J´ai fais quelques lectures et j´en retire une question.

Une definition file est-elle nécessaire si les fonctions exportées du DLL sont décorées avec la convention

__declspec(xxx)

En ce sens que le compilo ne devrait-il pas voir que la fonction est exportée si elle est décorée ?

dnob700
dnob700
Niveau 10
04 février 2005 à 19:41:01

je ne vais parler que de VC++ ( 2002) mais ça doit être asez similaire sur le reste :

il y aurait un moyen de ne pas décorer le nom à l´export dans une option du compilo mais je en l´ai jamais trouvé, donc que faire ?
d´une part, si tu exporte des foction surchargé ou des class, le plus simple ( et le seul moyen pour les fonction surchargé) est de déployer le fichier . lib qui va avec la DLL pour faciliter le link.

Même si cette méthode est défendu par les " puriste" ce n´est pas la plus pratique car il faut compiler pour chaque compilo.

la bonne méthode c´est donc de déployer la DLL seule, mais il faut absolument que les foction est leur vraie nom sinon c´est fort ennuyeux. A moins de leur donner un ordinal ( un numéro), mais dans les cas il te faut un fichier de définition donc le problème est le même.

comment se présente un fichier de def :

c´est un fichier . def qui porte le nom du projet ( générallement) et donc la structure est extremement simple pour une DLL

d´abord une ligne avec le nom de la dll précédée par le mot LIBRARY
puis sur la ligne suivante le seule mot EXPORTS

puis enfin sur chaque ligne le nom d´une fonction ( en respectant la casse) mais sans les arguments suivi ou non de son numéro d´ordre ( précédé par un @).

par exemple :
LIBRARY Clipboard
EXPORTS
GetClipboardText @1
SetClipboardText @2
ClearClipboard @3

avant les chiffre tu peut mettre des tabulation ( qui ont été détruite par le forum).

pour ce qui est du point d´entrée, il est obligatoire car windows l´appel quand la DLL est chargé, mais peut-être qu´il est crée si il n´y en a pas, je ne sais pas trop.

Ruffi
Ruffi
Niveau 9
04 février 2005 à 21:16:04

Hop hop . .. attention, je vais faire aparaitre un lien :

http://www.exood4.com/tutorials/articles/windows/windows_dll_programming_fr.pdf

Hop hop

whaaa, trop fort! :cool:

( bon tut, les remerciement vont à Altonfrere : https://www.jeuxvideo.com/forums/1-31-8244556-1-0-1-0-0.htm )

techslash
techslash
Niveau 8
04 février 2005 à 21:25:25

Merci beaucoup !

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment