开发者

linkage between dllimport and dllexport

开发者 https://www.devze.com 2023-03-26 18:35 出处:网络
I have some question concerning dllexport, dllimport in C++ in Windows. Let\'s assume I have some module.cpp and module.h which export functions using dllexport. Let\'s assume that I also have moduleW

I have some question concerning dllexport, dllimport in C++ in Windows. Let's assume I have some module.cpp and module.h which export functions using dllexport. Let's assume that I also have moduleWrapper.cpp and moduleWrapper.h which imports functions from module.cpp using dllimport.

Can somebody please explain why can I miss writing #include module.h in my moduleWrapper.cpp and moduleWrapper.h. I can't understand how linker does know about addr开发者_运维技巧esses of functions from module.cpp, thanks in advance for any explanation


From what I understand, you have something like this in module.h:

__declspec(dllexport) void f();

And then, you have a similar statement in your moduleWrapper.cpp:

__declspec(dllimport) void f();

That counts as a function declaration, so you remove any need to include module.h. The way it's commonly done is by putting the following code in your include file:

#ifdef PROJECTNAME_EXPORTS // (the default macro in Visual Studio)
#define PROJECTAPI __declspec(dllexport)
#else
#define PROJECTAPI __declspec(dllimport)
#endif

And then declaring your function in the header file like this:

PROJECTAPI void f();

That way, it will translate to dllexport when you're compiling your DLL, and to dllimport in any files that are not part of your DLL and that happen to be using the header.

0

精彩评论

暂无评论...
验证码 换一张
取 消