Création de DLL

Lorelei42 Messages postés 24 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 4 août 2004 - 30 juin 2004 à 11:15
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 24 mai 2007 à 20:40
Bonjour,

J'ai un gros programme en C et on m'a demandé d'en faire 1 DLL.
Lors de mes cours en programmation, on ne m'a jamais parlé de DLL. J'ai trouvé déjà des renseignements, mais ce n'est pas toujours très clair.

Peut-être vous pouvez m'éclairer sur certains points encore obscurs:
Quelles sont les types de fonctions que l'on peut mettre dans 1 DLL? (sans argument en sortie, en entrée ...)
Faut-il bien 3 fichiers? (1 .h, 1 .def et 1.c)
Sur les exemples, on parle d'API est-ce obligatoire?
Lorsque l'on compile ces 3 fichiers on obtient le .dll ? et le .lib?
Ensuite on écrit un autre fichier .c où on fera appelle à la DLL ?

J'ai tenté de faire les 3 fichiers. Tout compile mais le .dll n'est pas généré!!!!

Quelqu'un a t'il un exemple pour m'aider ?

Merci

8 réponses

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
30 juin 2004 à 11:56
1) on peut mettre n'importe kel type de fonctions dans une DLL.
2) ouais il faut bien ces trois types de fichiers : le .c ou .cpp qui va contenir le code des fonctions que tu veux mettre dans la dll, le .h qui va contenir les definitions (= les entêtes) de ces fonctions, pour que tu puisses les utiliser dans un autre projet qui fera appel a ta DLL, et le .def qui contient les symboles qui sont exportés dans la DLL (ex: dans ton .c t'as 3 fonctions : une principale, et deux autres intermédiaires qui sont utilisées par ta fonction principale, la mieux vaut n'exporter que la fonction principale, cela ne signifie pas que les 2 autres fonctions ne seront pas dans la DLL, mais juste qu'on ne pourra pas appeler ces fonctions la depuis un autre programme)
3) on parle d'api car les DLL c'est pour windows ! donc oui je pense (sans etre certain !!!) que c'est obligatoire
4) normalement quand on compile les trois fichiers, ton compilateur te génere un .lib et un .dll (le .lib qu'il te suffit d'ajouter lors de l'edition de lien d'un .exe ou d'une autre .dll qui veut utiliser des fonctions de ta dll)

je ne sais pas si c'est standard, mais sous visual c++, on n'est pas obligé de generer manuellement un .def : il suffit d'ajouter:
 extern "C"
{
   __declspec(dllexport) int fonctiontest(int a, int b);
};

dans ton .c pour dire que tu veux exporter la fonction fonctiontest. il suffit alors d'ajouter le .lib généré dans ton autre projet pour utiliser ta DLL.

voila je sais pas si c'est plus clair pour toi mtnt mais bon ...
a+ ;)
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
30 juin 2004 à 12:28
tutorial bien fait pour la création de DLL :

http://www.cppfrance.com/code.aspx?ID=21438
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
30 juin 2004 à 14:01
Tu as exemple dans mes sources en format VS 2003, te reste plus qu'a l'ouvrir et ajouter tes fonctions.

ciao...
BruNews, Admin CS, MVP Visual C++
0
hardgamer666 Messages postés 8 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 22 juin 2007
21 mai 2007 à 20:53
Salut à tous;

Voilà, je viens de suivre le tuto du lien fourni plus haut, mais j'ai beaucoups de mal à utiliser la DLL avec Visual C++.Net 2003.

Il me refuse en effet soit de charger le DLL, soit de comprendre qu'il doit exécuter le fonction.

Donc, si vous connaisez un lien qui me permetrait d'apprendre l'utilisation et la création de fichiers DLL avec VC++.Net 2003, ce serrait simpas de m'en faire part

J'ai peut être pas assé chercher ou utiliser de mauvais mots clé, mais je suis dans le désespoir total.

Si vous saviez m'aider, un lien ou le titre d'un livre sur le sujet, qu'importe.

Un grand merci pour vos future réponces

Fred
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
21 mai 2007 à 23:27
Tout est dans Richter avec force détails et exemples:
http://brunews.com/brunews/download/JR4.zip
http://brunews.com/brunews/download/JR4Sources.zip

ciao...
BruNews, MVP VC++
0
hardgamer666 Messages postés 8 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 22 juin 2007
22 mai 2007 à 00:19
Merci à toi BruNews, j'espère que le traducteur dont je dispose pourra m'aider au mieux. En effet, la langue anglaise n'est pas encor mon fort :s

Mais je vais essayer de m'en sortire comme cela.

Sinon, Code-Source et ses innombrable membre m'aiderons à m'en sortir, lol.

Encor une fois merci
0
hardgamer666 Messages postés 8 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 22 juin 2007
24 mai 2007 à 00:41
Bonjour tout le monde,

Escusez moi d'encor vous déranger, mais je viens de refaire le petit tuto donné en lien par Cosmobob et Visual Studio 2005 me dit tout simplement qu'il ne peut pas charger l'instruction hDLL = LoadLibrary ("TestDll.dll") car il ne peut convertire le premier paramètre ( donc le nom de la dll qui ce trouve apparament en const char[12] ) en un paramètre de type LPCWSTR.

Voici le message d'erreur que me donne VS2005:

error c2664: 'LoadLibraryW' : impossible de convertire le paramètre 1 de 'const char[12]' en 'LPCWSTR'

Par contre pour ce qui est de la dll, le compilateur ne me met aucune erreur ni avertissement

Donc, ma question est le suivante, que dois je faire. Je voudrais en effet pouvoir utiliser le support des dll pour tenter de créer un petit moteur 3D avec DirectX 9 ?

Si vous voulez les sources de mon travail, bien que j'ai suivi les instruction du tuto, dite moi simplement coment je puis les envoyer.

Entre parenthèse BruNews, tes liens on l'aire vraiment intéressent, mais mon traducteur fonctionne très mal, tu n'aurais pas un lien vers une version française de ça ? Ou un lien vers un site qui explique bien la création et l'utilisation des DLL avec VS 2005.

Merci d'avance à tous pour vos réponces

Fred.
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
24 mai 2007 à 20:40
Règle ton projet en ANSI au lieu de UNICODE.

ciao...
BruNews, MVP VC++
0