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...