2012-05-19 33 views
3

我已經創建了兩個靜態庫和EXE文件(使用靜態庫),但是當我在IDA開拓EXE親,出口都在EXE上市以及。EXE出口靜態庫出口以及

我知道自己應該在的.lib本身出口,但他們爲什麼顯示爲在EXE過出口?

編輯:這是一個以出口/進口(他們是在單獨的頭文件

這裏是出口:

#define NC_LIBEXPORT(a) extern "C" __declspec(dllexport) a __cdecl 
NC_LIBEXPORT(VOID) rol8(unsigned char* a, unsigned char b); 

和進口:

extern "C" VOID rol8(unsigned char* a, unsigned char b); 
+2

它不來自頭文件,該屬性被附加到在的.lib內的obj文件標識符。您將不得不構建.lib的特殊版本,以防止應用__declspec。不太確定,如果你還將.lib鏈接到一個DLL中,這是值得的,它不像任何代碼實際上將使用導出。 –

+0

@Hans是的,我只是慢了一點。通過構建測試項目! –

+0

謝謝@HansPassant:]那就做到了!沒有意識到靜態庫不需要'dllexport':]對於這個項目來說,兩個靜態庫對我來說很好。只是一個宏觀編輯。 – Qix

回答

5

你需要確保當您建立靜態庫,你不使用__declspec(dllexport)

如果您想在DLL和可執行文件中使用相同的庫,並且您不希望可執行文件導出這些符號,那麼您需要使用DEF文件而不是__declspec(dllexport)

+0

他們不是,就是這樣。我將添加一些源的問題,堅持住...... – Qix

+0

進口/出口是在單獨的頭文件... – Qix

+0

我使用的進口(第二代碼塊)在我的可執行文件。 – Qix