Simple moyen de faire une dll à partir de fonctions cpp

Description

Suite à une question dans ma messagerie, voici un SIMPLE moyen de récupérer des fonctions déjà écrites en C++ et de les regrouper en une DLL.

1) Extraire les fonctions désirées dans un fichier : fonctions.cpp
Remarque, il n'est pas nécessaire de modifier leur prototype
Exemple :
double Ajouter(double x, double y){return x+y;}
double Soustraire(double x, double y){return x-y;}

2) exporter les fonctions de la DLL :
Il s'agit de créer un fichier "fonctions.DEF"
Exemple :
LIBRARY petiteDLL
EXPORTS Ajouter
Soustraire

3) Fabriquer la DLL :
On pourra créer un fichier "make.bat" ainsi :
rem Compilation
CL.exe /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Y- /Fo"fonctions.obj" /FD /c fonctions.cpp
rem /MT pour lien avec LIBCMT.LIB (Multi-Thread)

rem LINK
link.exe /nologo /dll /machine:I386 /def:".\fonctions.def" /out:petiteDLL.dll /implib:"petiteDLL.lib" fonctions.obj

4) Créer un fichier d'entête pour les EXEs clients de la DLL
Il suffit de regrouper les prototypes des fonctions dans un fichier "fonctions.h"
double Ajouter(double x, double y);
double Soustraire(double x, double y);

5) On livrera au client la DLL, la librairie d'import et le fichier d'entête soit :
petiteDLL.DLL, petiteDLL.LIB et fonctions.h

Conclusion :


La question exacte portait sur la fabrication d'un outil d'Automatisation pour générer des DLLs à partir du code de fonctions écrites dans des fichiers CPPs

Le problème n'est pas très simple :
il s'agit de déterminer QUELLES fonctions exporter (peut être pas "main" ! )
il s'agit ensuite de les repérer pour en extraire :
- le corps pour le .CPP
- le prototype pour le .H
- le nom pour le .DEF
et peut-être le plus délicat... importer au link les .LIB nécessaires

Voici la technique microsoft : placer les .LIB les plus fréquemment utilisés
au niveau du link, il peut être nécessaire de prendre en compte des librairies statiques contenant les fonctions utilisées par votre code
Exemple :
link.exe kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /def:".\fonctions.def" /out:petiteDLL.dll /implib:"petiteDLL.lib" fonctions.obj

vérifer avant d'utiliser les .BAT que les variables d'environnement du compilateur sont configurées

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.