Utilisation d'une class cpp dans une DLL
[Suite à cette discussion]
Bonjour,
Avant de vous envoyer ce message j'ai suivi les indications, mais malheureusement cela ne fonctionne pas pour tout le monde. Je pense qu'il doit s'agir d'une erreur de saisie. Mais à force de lire et relire, on ne voit plus rien. :cry:
Voici le code:
header: my_lib.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
#ifdef MY_LIB_DEF // inside DLL
#define MY_LIB __declspec(dllexport)
#else
#define MY_LIB __declspec(dllimport)
#endif
class MY_Class {
private:
char* filename;
int fd;
public:
MY_Class();
~MY_Class();
int openMYfile(char* fname, int mode);
int closeMYfile();
};
extern "C" MY_LIB MY_Class* new_MYCLASS(); |
Voici le code de la dll my_lib.cpp
Code:
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
|
#define MY_LIB_DEF
#include "my_lib.h"
/* CONSTRUCTEUR */
MY_Class::MY_Class(){
. . .
}
/* DESTRUCTEUR */
MY_Class::~MY_Class() {
. . .
}
int MY_Class::openMYfile (char* fname, int mode) {
return 0;
}
int MY_Class::closeMYfile () {
return 0;
}
/* FOR USAGE VIA DLL */
MY_Class* new_MYCLASS() {
return new MY_Class();
} |
et enfin le code du prog principal (test.cpp)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
#include "MY_lib.h"
int main(int argc, char* argv[]) {
//LoadLibrary("MY_lib.dll" ); // ne fonctionne ni sans ni avec le ligne
printf("INITIALISATIONS ... ");
MY_Class* TheObject = ::new_MYCLASS();
printf(" OK\n");
TheObject->openMYfile("C:/Dev/cpp/test.txt", 0);
TheObject->closeMYfile();
return 0;
} |
Lors de la compilation (avec mingw32), les erreurs suivantes sont retournées:
Citation:
C:\Dev\cpp\mingw32-make.exe -f makefile
g++ -c MY_lib.cpp -o MY_lib.o
g++ -shared -o MY_lib.dll MY_lib.o
g++ -o test.exe test.cpp
C:\Users\...\Temp/cc1oVLPB.o:test.cpp: (.text+0x37): undefined reference to `_imp__new_MYCLASS'
C:\Users\...\Temp/cc1oVLPB.o:test.cpp: (.text+0x76): undefined reference to `MY_Class::openMYfile(char*, int)'
C:\Users\...\Temp/cc1oVLPB.o:test.cpp: (.text+0xb0): undefined reference to `MY_Class::closeMYfile()'
collect2: ld returned 1 exit status
mingw32-make.exe: *** [TEST] Error 1
Je suis sec. Merci pour votre aide...