Bonjour à tous,
J'ai créé une DLL à partir d'un code source en C, en utilisant l'assistant "Expert DLL" de Borland C++ Builder 6.
J'ai inclus au projet de la DLL la librairie "memmgr.lib" comme cela est conseillé.
Pour compiler cette DLL, j'ai créé un .HPP contenant une seule fonction :
Lorsque j'utilise cette DLL dans un projet C++, j'inclus le .LIB créé lors de la compilation de la DLL, et j'inclus également le HPP que je suis obligé de un peu modifier pour ne pas avoir un "unresolved external" lors de la compilation :
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 #ifndef NnDllH #define NnDllH #ifdef __DLL__ #define IMPORT_EXPORT __declspec(dllexport) #else #define IMPORT_EXPORT __declspec(dllimport) #endif #if !defined(_POINT_STRUCT) #define _POINT_STRUCT typedef struct { double x; double y; double z; } point; #endif IMPORT_EXPORT void InterpolationNaturalNeighbor(int nin, point *pin, double xmin, double xmax, double ymin, double ymax, int nx, int ny, int type_interpolation, int nout, point *pout); #endif
Déjà, est-ce que cela est correct ? Est-ce qu'il n'est pas déconseillé de mêler DLL en C et code source en C++ ?
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 #ifndef NnDllH #define NnDllH #if !defined(_POINT_STRUCT) #define _POINT_STRUCT typedef struct { double x; double y; double z; } point; #endif extern "C" __declspec(dllimport) __stdcall void _InterpolationNaturalNeighbor(int nin, point *pin, double xmin, double xmax, double ymin, double ymax, int nx, int ny, int type_interpolation, int nout, point *pout); #endif
Jusqu'à présent, je n'avais pas rencontré de problème en utilisant ma DLL et mon LIB dans des projets en C++. Jusqu'à aujourd'hui, où j'ai créé plein de classes dans un gros projet, et lorsque j'appelle ma fonction _InterpolationNaturalNeighbor(...) dans une des fonctions d'une de mes classes, mon programme plante à la sortie de l'appel de cette fonction : toute la mémoire a l'air en vrac, l'instance de ma classe n'existe même plus en mémoire, tout est cassé
Etant donné que la fonction en C que j'utilise dans la DLL est normalement exempte de fuites mémoires (puisque ce n'est pas moi qui l'ait codée, c'est une référence sur le web), je soupçonne que ce soit le mélange C/C++ qui soit à l'origine de ce souci... La fonction de la dll contient notamment des malloc... Ceux-ci ne risquent-ils pas, par exemple, de prendre des emplacements mémoire déjà alloués par mes classes de mon projet principal ?
Merci pour vos avis !!
Partager