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);
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;
}
Apr�s compilation sous visual studio je r�cup�re 2 fichiers MaDll2.lib et MaDll2.dll
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

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);
}
Et �a fonctionne. En esp�rant que ce petit post soit utile � certains