這是我第一次處理DLL。繼MSDN文檔我創建了一個頭文件fooExports.h與宏根據預處理器定義定義:如何使用__declspec(dllexport/import)將C結構從DLL /導出/導入到控制檯應用程序
#ifdef FOODLL_EXPORTS
#define FOO_API __declspec(dllexport)
#else
#define FOO_API __declspec(dllimport)
我的目的是無論是在我的DLL實施以及在控制檯應用程序來使用這個頭。到目前爲止,導入和導出功能工作得很好。當我嘗試導出一個已經定義的結構時,問題就出現了,我需要它作爲一個導出函數的參數。例如,在上述的頭文件我聲明FOO_API void foo(FooParams *args)
和args
是限定的結構如下:
typedef struct FooParams
{
char *a;
char *b;
void *whatever; //some other type
} FooParams;
這個結構有在foo.h中進行定義,而不是在fooExports.h。有沒有什麼辦法可以導出這個結構而不需要從它的原始頭文件中取出(考慮到我想保持導出/導入集中在fooExports.h)。 這樣做會更好嗎?該DLL全部是C以及使用它的客戶端應用程序。
您不導出類型,您導出鏈接器符號。 – aschepler 2013-03-11 15:20:11
@aschepler你會介意擴展嗎? – wotann07 2013-03-11 15:28:03
爲什麼你使用兩個.h文件或爲什麼你沒有聲明foo()的參數類型,這完全不清楚。在結構中沒有任何要導出的東西,它沒有任何代碼。避免這種困境的簡單方法是隻使用一個.h文件並完成它。 – 2013-03-11 17:25:33