pb header lors de la compilation d'une dll
Bonjour,
je compile sans soucis des dll en c mais j'ai un problème avec le point suivant.
Tout d'abord mon environnement de développement:
winXp, gcc 4.0.0_1
J'intègre les dll que je développe à des programme c++ (avec Qt 4.6.2)
Ci dessous le code minimal d'une dll qui export une fonction dispHello (qui affiche "hello")
On trouve également la fonction DllMain appelée lorsque que l'on charge ou décharge la dll.
Mon problème est le suivant: Si je veux appeler des fonctions dans DllMain, je suis obligé de les définir dans le même fichier que celui de DllMain. Si je déclare la fonction dans un .h et je la féfinis dans un autre fichier, le compilateur retournera un fonction undifined.
La compilation du code ci-dessous provoque cette erreur avec la fonction test. Mais ça marche si je copie/colle la définition de test au-dessus de celle de DllMain.
Qu'est ce qui ne va pas d'après vous?
mainDll.h
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 30 31
|
#ifndef __MAIN_H__
#define __MAIN_H__
#include <stdio.h>
#include <windows.h>
/* To use this exported function of dll, include this header
* in your project.
*/
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
void test(void);
#ifdef __cplusplus
extern "C"
{
#endif
void DLL_EXPORT dispHello(void);
#ifdef __cplusplus
}
#endif
#endif // __MAIN_H__ |
main.c
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
#include "mainDll.h"
// a sample exported function
void DLL_EXPORT dispHello(void)
{
printf("Hello world\n");
}
extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
// attach to process
#ifdef DEBUG
printf("DLL_PROCESS_ATTACH\n");
#endif
test();
// return FALSE to fail DLL load
break;
case DLL_PROCESS_DETACH:
// detach from process
#ifdef DEBUG
printf("DLL_PROCESS_DETACH\n");
#endif
break;
case DLL_THREAD_ATTACH:
// attach to thread
#ifdef DEBUG
printf("DLL_THREAD_ATTACH\n");
#endif
break;
case DLL_THREAD_DETACH:
// detach from thread
#ifdef DEBUG
printf("DLL_THREAD_DETACH\n");
#endif
break;
}
return TRUE; // succesful
} |
test.c
Code:
1 2 3 4 5 6 7
|
#include "mainDll.h"
void test(void)
{
printf("test");
} |