Possible Duplicate:
Windows & C++: extern & __declspec(dllimport)
Why/when is __declspec( dllimport ) not needed?
I want to write a DLL project. This project include several DLLs. They are dependent. I define some macros like follow :
#ifdef MYDLL_DECL1
#define DLL_DECL __declspec(dllexport)
#else
#define DLL_DECL __declspec(dllimport)
#endif
I defined MYDLL_DECL1…MYDLL_DECLn for each modules. Because I thought if i define the same macro that it wouldn’t work . But I really want to define only one macro, and i wrote a testbed. I have two modules. In the second moudle’s source file. I write code like follow:
#define MYDLL_DECL
#include "moudle1.h"
#include "moudle2.h"
If I use the same macro name “MYDLL_DECL” ,for modle1’s head file I have defined “MYDLL_DECL”, so “DLL_DECL” is equal to ‘__declspec(dllexport)’. Actually in module2 it should be equal to “__declspec(dllimport)”, Because module2 import module1. But I found it worked when I just define a same macro for two module. And I also find that the OpenCV also use this methold to its library
First, think about what you need without the macro. If a class or
function is defined in module1, you need to declare it
__declspec(dllexport)in module1, and__declspec(dllimport)in allof the other modules. Including in the header file where it is
declared.
Since you don’t want to maintain two different header files, and you
don’t what conditional compilation all over the place, the best solution
is use a conditionally defined macro, e.g.:
When invoking the compiler, you only define
MODULE1in the projectmodule1; you don’t define it in any other project. So when compiling
module1,
MODULE1_DECLexpands to__declspec(dllexport), and whencompiling any other module, it expands to
__declspec(dllimport).