rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

Compiler une DLL en C

Alex, le lundi 14 juin 2004 à 05:52:08
Bonjour
Je dois realiser une bibliotheque en pur C pour Windows xxx, elle doit etre sous forme d'une DLL. Pour des raisons de portabilite, je n'ai pas le droit d'utiliser un assistant du style Visual C et autre Builder, je doit la definir et la compiler a la main. Elle doit juste me permettre d'acceder a tout un tas de fonctions.

Le probleme, c'est que je suis issu du monde Unix, aussi la programmation Windows m'echappe quelque peu. Je ne trouve pas de docs utilisables pour faire une DLL a la main... Peut-on repondre a mes questions ?

1/ Quelle est la procedure pour creer une DLL a la main ?
2/ Quelle est la procedure pour appeller les fonctions de ma DLL ?
3/ Si n programmes appellent la meme fonction de la meme DLL, dois-je gerer moi meme la concurrence des acces ?

Juste un lien vers un site peut deja mettre utile...
D'avance merci.
(Salut Tafiscobar !!!)
Répondre à Alex  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
_julien_, le lundi 14 juin 2004 à 09:08:52
Tu peux utiliser MinGW, tu ne seras pas trop perdu comme ca :)
A cette page ils expliquent comment creer une dl:
http://www.mingw.org/docs.shtml -> How to create a dll

-- 
julien barbier
Répondre à _julien_

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Alex, le lundi 14 juin 2004 à 09:26:11
Aie, au risque de paraitre difficile, ta solution ne me convient pas. Car avec MinGW, on fait deux trois appels "magiques", et hop, la DLL apparait. Ce qui revient a des assistants. Je n'ai pas droit au solutions "baguette magiques" ! Je dois pouvoir ecrire les makefiles pour n''importe quel compilateur, avec les memes fichiers sources. Et bien sur, pas question de maintenir une version des fichiers pour VC, une pour MinGw, une pour xxx, ...
Répondre à Alex

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Canard007, le lundi 14 juin 2004 à 10:14:58
Salut,

moi pour le faire j utilise cygwin....
et voici la procedure que j utilise et que je pense portable sur la plupart des compilateur...

donc en 1 je compile 1 a 1 tous les fichier .C
gcc -c -I"les includes particuliers" -o monfichier.o monfichier.c
ensuite je crée un fichier .def qui va referencer l ensemble des fonctions dedans il y a donc qq chose du genre:
EXPORTS
mafonction1
mafonction2
etc...
et ensuite je realise la creation de la dll:
gcc -shared -I"les includes perticuliers(chemin)" -o madll.dll monfichier.c monautrefichier.c monfichierdef.def
et hop tu as ta dll..

Sinon pour la concurence des accé il n'y a aucun probleme moi j ai +thread qui utilisent les meme fonctions d'une de mes dll et ca marche sans probleme.

j'espere t avoir aidé...
bon courage
Répondre à Canard007

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Al, le lundi 14 juin 2004 à 10:30:47
Encore une victoire de Canard hihi !
Bon oui, c'est presque ca... Mais quelques precisions me seraient precieuses :
1/ Comment tu definis le point d'entree dans ta DLL (L'equivalent du main poun programme classique) ?
2/ J'ai lu qui fallait generer un .lib, pour des raisons obscures...
3/ Comment j''accede au fonctions de la DLL, sachant que je possede les headers de ces fonctions ?
Répondre à Al

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Canard007, le lundi 14 juin 2004 à 11:43:01
re,
bon pour le point d'entrée je ne crois pas que cela soit necessair la dll peur ne contenir qu'une succession de fonctions.
Pour le .lib j en ai aucune idée jamais u besoin...
Enfin moi je me sert des dll pour faire du jni..interface avec java...donc je les appel avec java en utilisant la fonction loadlibrary...
Mais je suppose qu en c/c++ c est le meme principe tu charge la lib et apres tu utilise les fonctions direct
Répondre à Canard007

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tafiscobar, le lundi 14 juin 2004 à 13:13:21
salut Alex et au pays, t'as deja commecencé a coder??
peut etre que ceci va t'aider (c'est vrai que ds la plupart, ils expliquent avec les outils, alors q les gens veulent savoir comment ca marche) : http://msdn.microsoft.com/library/fre/default.asp?url=/libra­ry/FRE/vccore/html/_core_export_from_a_dll.asp

t'as ça aussi : http://www-igm.univ-mlv.fr/~dr/Xpose2001/legeay/

tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
Répondre à tafiscobar

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Alex, le mardi 15 juin 2004 à 03:52:06
Salut Tafiscobar

Ton lien et les reponses precedentes m'ont permis de bien avancer, merci beaucoup. Je ne code pas encore, mais j'ai mis au point une conception d'ensemble et elle a ete valide par l'equipe du labo.
Je mets en place la chaine de compilation, plutot complexe, car il faut que ca compile pour Linux, VisualC, BorlandC, et des kits de developpement pour materiel embarques !!!
J'utilise Ant et du Xslt pour generer des scripts specifiques a la plateforme. Du code XML qui genere du code scripts qui genere du code C qui genere les librairies. Ouf !!!!!!!
Répondre à Alex

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Canard007, le mardi 15 juin 2004 à 09:53:33
lol
have fun :p
Répondre à Canard007

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Giraud, le lundi 28 juin 2004 à 22:42:17
Bonjour

pour créer une DLL, je te conseille d'aller sur le site de microsoft:
http://msdn.microsoft.com/library/fre/default.asp?url=/libra­ry/FRE/vccore/html/_core_set_compiler_options.asp.
Moi aussi, je m'amuse à compiler ces DLL, un vrai plaisir....
BOn courage.
Mais si qq a une méthode je suis preneur

Emmanuel
Répondre à Giraud

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 Alex Swartzkaiser, le mercredi 30 juin 2004 à 03:26:43
- Imagine que tu est 6 fonctions (fonction1, fonction2,...) a inclure dans ta DLL, decrites dans 4 fichiers C (fichier1.c, fichier2.c,...)
- Imagine que tu est VisualC++ installe.

Voila ma recette :
- Lancer vcvars32.bat

- Fabriquer les .obj pour chaque fichier, ce qui ce fait avec
cl [options de compilations] fichier1.c -Fofichier1.obj -c

Il ya une option speciale du compilateur Microsoft pour optimiser specialement pour une DLL...

- Avoir un fichier .DEF (un fichier Ascii tout simple), qui permet de dire quelles fonctions vont figurer dans ta DLL, avec quel nom et quel position... Tu peut aussi preciser d'autres parametres dans .DEF, voir sur MSDN. Ici le fichier aura cette tete :
DESCRIPTION "Ma DLL avec 6 fonctions"
EXPORT
fonction1 @1
fonction2 @2
fonction3 @3
fonction4 @4
fonction5 @5
fonction6 @6

Les numeros avec @ doivent etre uniques. En fait, j''ai un fichier XML avec mes noms fonctions, et une jolie feuille de style XSLT qui me genere mon .DEF avec les numeros, pour etre sur de faire de doublon. Apellons ce fichier MaDll.def

- Fabriquer la DLL, ce qui est le travail du linker. Elle s''apellera MaDll.dll
link -dll -def:MaDll.def -out:MaDll.dll fichier1.obj fichier2.obj fichier3.obj fichier4.obj


Et tu obtiendras 2 fichiers, MaDll.dll ainsi que MaDll.lib.

- Pour utiliser ta dll, tu dois lier l''executable avec MaDll.lib

Mais ma recette n''est pas encore parfaite... Je ne peut pas faire d''entree sorties car elles plantent systematiquement avec un programme qui utilise la Dll (les fonctions d''ES sont dans la DLL). Alors que si je lie statiquement, ca marche. Je ne sais pas pourquoi...
Répondre à Alex Swartzkaiser
The language dll vb6fr.dll could not be found (Résolu)bjr et merci pour votre aide j'ai changé d'ordi, j'étais en win98 SE mainteant win xp à l'installation des add on msts msg suivant the language dll vb6fr.dll could not be found. j'ai copié cette dll de win 98 pour la mettre en... www.commentcamarche.net/forum/affich-2314457-the-language-dll-vb6fr-dll-could-not-be-found
Problème de dll (chargement) en C (Résolu)Bonjour je suis actuelement en train de développer un programme en C. Ce programme controle une carte d'acquisition analogique pour faire des mesures de tensions. cette carte à besoin, pour etre utilisé d'une dll. cette dll doit etre chargé... www.commentcamarche.net/forum/affich-2445226-probleme-de-dll-chargement-en-c
The language dll vb6fr.dll could not be found (Résolu)bjr et merci d'avance pour votre aide mon fils m'a donné son ordinateur avant j'étais win 98 SE maintenant xp, j'ai voulu installer les add on de train simulator, j'ai donc ce msg the language dll vb6fr.dll could not be found.... www.commentcamarche.net/forum/affich-2314445-the-language-dll-vb6fr-dll-could-not-be-found
MSIMN a causé une défaillance de page dans le module MSOE.DLLA l'ouverture de Outlook Express vous obtenez le message d'erreur suivant : MSIMN a causé une défaillance de page dans le module MSOE.DLL Ce problème est dû à la corruption ou l'absence du fichier Folders.dbx. Pour y remédier, il suffit de... www.commentcamarche.net/faq/sujet-2715-msimn-a-cause-une-defaillance-de-page-dans-le-module-msoe-dll
[Pratique] Problèmes avec des DLLVoici un document qui résume toutes les erreurs concernant les DLL, ainsi qu'une liste de tous les fichiers .dll connus : zebulon.fr Voici quelques sites pour rechercher un fichier DLL : http://dll... www.commentcamarche.net/faq/sujet-2555-pratique-problemes-avec-des-dll
[Windows] Nettoyage des DLL chargées en mémoireLe système d'exploitation Windows conserve les librairies (DLL) récemment utilisées en mémoire, afin de potentiellement accélérer le démarrage des applications au prochain lancement. Néanmoins ces librairies consomment de l'espace mémoire. Ainsi,... www.commentcamarche.net/faq/sujet-2377-windows-nettoyage-des-dll-chargees-en-memoire
Créer fichier .ico a partir de shell32.dll (Résolu)Bonjour, Question bête car je tourne en rond : Je voudrais créer un fichier xyz.ico depuis un icone contenu dasn shell32.dll ou autre dll. Cela pour pouvoir mettre ce fichier xyz.ico sur une clé usb ou carte mémoire et l'utiliser dans la fonction... www.commentcamarche.net/forum/affich-6995161-creer-fichier-ico-a-partir-de-shell32-dll
Erreur de chargement de ctccw32.dll (Résolu)Bonjour, A chaque démarrage de Windows, rundll signale une erreur de chargement de ctccw32.dll Cette erreur est consécutive à un virus signalé par avast que j'ai supprimé. Actuellement j'utilise Kaspersky. Pouvez me faire une analyse du... www.commentcamarche.net/forum/affich-3694496-erreur-de-chargement-de-ctccw32-dll
Cheval de troie Vundo.dll (Résolu)Bonjour, j'ai un message d'alerte sur un cheval de troie Vundo.b.dll. Comment l'éradiquer ? Le peut-on avec Regcleaner ? Comment Faire ? Merci Fred www.commentcamarche.net/forum/affich-1484024-cheval-de-troie-vundo-dll
Télécharger CygWinCygwin est un environnement UNIX pour Windows composé: d'un shell Unix d'une librairie dynamique (DLL) chargée de fournir une couche d'émulation Unix pour le système Windows d'un ensemble de librairies, sources et exécutables adaptés à Cygwin... www.commentcamarche.net/telecharger/telecharger-99-cygwin
Toutes les réponses pour « Compiler une DLL en C »