DLL導出表處理
防止別人猜到函數功能,所以要對導出表函數名進行處理,一般就是使用宏定義代替函數名,然後後面使用宏定義代替原有函數名,如下:
// 下列 ifdef 塊是創建使從 DLL 導出更簡單的
// 宏的標準方法。此 DLL 中的所有文件都是用命令行上定義的 DLLTEST_EXPORTS
// 符號編譯的。在使用此 DLL 的
// 任何其他項目上不應定義此符號。這樣,源文件中包含此文件的任何其他項目都會將
// DLLTEST_API 函數視爲是從 DLL 導入的,而此 DLL 則將用此宏定義的
// 符號視爲是被導出的。
#ifdef DLLTEST_EXPORTS
#define DLLTEST_API __declspec(dllexport)
#define DLLTEST_API_EC extern "C" __declspec(dllexport) // cdecl stdll
#else
#define DLLTEST_API_EC extern "C" __declspec(dllimport)
#define DLLTEST_API __declspec(dllimport)
#endif
#define DllTest_X2 DLLTEST_0
#define DllTest_X2_EC DLLTEST_0_EC
DLLTEST_API int DllTest_X2(int i);
DLLTEST_API_EC int DllTest_X2_EC(int i);
int WINAPI DllTest_X2_STD(int i);
另外注意extern c的話不要使用stdcall調用,防止奔潰。
或者可以使用def文件,修改函數導出的名字
def文件使用
首先定義
int WINAPI DllTest_X2_STD(int i);
{
return 0;
}
然後再def實現裏
LIBRARY "DllTest"
EXPORTS
DLLTEST_0_STD = DllTest_X2_STD//等號前是導出表裏的函數的名字,等號後面試定義裏函數的名字
參考資料
DLL編寫中extern “C”和__stdcall的作用
https://blog.csdn.net/dongchongyang/article/details/52926310