理解 __declspec(dllexport)和__declspec(dllimport)

考慮下面的需求,使用一個方法,一個是提供者,一個是使用者,二者之間的接口是頭文件。頭文件中聲明瞭方法,在提供者那裏方法應該被聲明爲__declspec(dllexport),在使用者那裏,方法應該被聲明爲__declspec(dllimport)。二者使用同一個頭文件,作爲接口,怎麼辦呢


.h
#ifdef DLL_EXPORTS
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif

DLLEXPORT int add(int ,int);

implement.cpp
#include .h
#define DLL_EXPORT
DLLEXPORT int add(int , int){
<span style="white-space:pre">	</span>/**/
};

user.cpp
#include .h
// don't define DLL_EXPOET

導出變量用 __declspec(dllexport) int a;
導出函數用 __declspec(dllexport) void foo();
導出類用 class __declspec(dllexport) a{};
如果應用程序需要調用dll中的函數,則需要用__declspec(dllimport)修飾,因此當工程中不包含DLL_EXPORTS預定義時,DLLEXPORT 就指代__declspec(dllimport) 這樣生成dll程序和調用dll的程序可以使用同一個頭文件

發佈了1 篇原創文章 · 獲贊 0 · 訪問量 8027
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章