C C 中export的定義

2021-04-09 06:53:23 字數 1814 閱讀 4971

windows下的dll、linux下的庫或是c++中呼叫c的庫,均可能用到import/export。本文討論一種通用的import/export巨集定義的使用實踐。

如下所示,"common.h"定義了可以跨平台的import/export巨集定義,"something.h"定義了某個類標頭檔案的import/export定義,"something.cpp"實現類並export類,使用該類的檔案僅需#include "something.h",由於沒有定義巨集some_exports,所以預設是import啦。

"common.h"中包括:

#ifdef  win32

#ifdef __cplusplus

#define dll_export_c_decl extern "c" __declspec(dllexport)

#define dll_import_c_decl extern "c" __declspec(dllimport)

#define dll_export_decl extern __declspec(dllexport)

#define dll_import_decl extern __declspec(dllimport)

#define dll_export_class_decl __declspec(dllexport)

#define dll_import_class_decl __declspec(dllimport)

#else

#define dll_export_decl __declspec(dllexport)

#define dll_import_decl __declspec(dllimport)

#endif

#else

#ifdef __cplusplus

#define dll_export_c_decl extern "c"

#define dll_import_c_decl extern "c"

#define dll_export_decl extern

#define dll_import_decl extern

#define dll_export_class_decl

#define dll_import_class_decl

#else

#define dll_export_decl extern

#define dll_import_decl extern

#endif

#endif

"something.h"中包括:

#include "common.h"

#ifdef some_exports

#define some_class dll_export_class_decl

#define some_api   dll_export_decl

#else

#define some_class dll_import_class_decl

#define some_api   dll_import_decl

#endif

class some_class myclass {}

some_api void myfunc() {}

"something.cpp"實現myclass,標頭檔案包括:

#define  some_exports

#include "something.h"

小雞射手一直採用這種方法export dll中的類,如plugin的實現一文中談到的c++實現plugin。當然這也是借鑑opensource的做法的 

C C 中export的定義

windows下的dll linux下的庫或是c 中呼叫c的庫,均可能用到import export。本文討論一種通用的import export巨集定義的使用實踐。如下所示,common.h 定義了可以跨平台的import export巨集定義,something.h 定義了某個類標頭檔案的imp...

Linux中的export用法

exports是設定nfs共享檔案的 linux export命令 功能說明 設定或顯示環境變數。語 法 export fnp 變數名稱 變數設定值 補充說明 在shell中執行程式時,shell會提供一組環境變數。export可新增,修改或刪除環境變數,供後續執行的程式使用。export的效力僅及...

理解make中的export

home student makefile a shell pwd export a all echo a make c tt home student tt makefile b shell pwd all echo a echo b 在 home student下make 結果是什麼呢?home...