Salut � tous
Voil� ce petit post qui n'est pas une question mais plut�t une solution � un probl�me que j'ai eu et que j'ai pu r�soudre en naviguant dans pas mal de post � droite et � gauche.
Si jamais il n' a pas �a place ici .Toutes mes excuses aux mod�rateurs et administrateurs
Voici le probl�me:
J'ai �cris une DLL en C/C++ avec visual studio 2013 et je veux l'utiliser avec CBuilder Xe5.
Voici un extrait du .h et du .cpp de ma DLL (il s'agit de fonction tr�s simple pour v�rifier que �a marche).
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 // Le bloc ifdef suivant est la façon standard de créer des macros qui facilitent l'exportation // à partir d'une DLL. Tous les fichiers contenus dans cette DLL sont compilés avec le symbole MADLL2_EXPORTS // défini sur la ligne de commande. Ce symbole ne doit pas être défini dans les projets // qui utilisent cette DLL. De cette manière, les autres projets dont les fichiers sources comprennent ce fichier considèrent les fonctions // MADLL2_API comme étant importées à partir d'une DLL, tandis que cette DLL considère les symboles // définis avec cette macro comme étant exportés. #ifdef MADLL2_EXPORTS #define MADLL2_API __declspec(dllexport) #else #define MADLL2_API __declspec(dllimport) #endif extern MADLL2_API int nMaDLL2; MADLL2_API int fnMaDLL2(void);Apr�s compilation sous visual studio je r�cup�re 2 fichiers MaDll2.lib et MaDll2.dll
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 // MaDLL2.cpp*: définit le point d'entrée pour l'application DLL. // #include "stdafx.h" #include "MaDLL2.h" #ifdef _MANAGED #pragma managed(push, off) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } #ifdef _MANAGED #pragma managed(pop) #endif // Il s'agit d'un exemple de variable exportée MADLL2_API int nMaDLL2=0; // Il s'agit d'un exemple de fonction exportée. MADLL2_API int fnMaDLL2(void) { return 42; }
Utilis� tel quel �a ne fonctionne pas j'ai des erreurs au niveau de l'�dition de lien. Le fichier MaDll2.lib n'est pas lu par CBuilder. Il faut en construire un nouveau � partir du fichier MaDll2.dll avec l'utilitaire Implib.
Dans une fen�tre console entrez la commande suivante:
ImpLib -a MaDll2.lib et MaDll2.dll
De plus j'ai modifi� le .h de la mani�re suivante
Et �a fonctionne. En esp�rant que ce petit post soit utile � certains
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 #ifdef MADLL2_EXPORTS #define MADLL2_API __declspec(dllexport) #else #define MADLL2_API __declspec(dllimport) #endif extern "C" { extern MADLL2_API int nMaDLL2; MADLL2_API int fnMaDLL2(void); }
Partager