>>> 同事問我的,我回他的內容做個筆記XD <<
在.dll 的聲明中如果是:
extern "C" __declspec(dllexport) __stdcall int Myfunction_Add(int x,int y)
與
extern "C" __declspec(dllexport) int Myfunction_Add(int x,int y)
與
extern "C" __declspec(dllexport) int Myfunction_Add(int x,int y)
兩種方法在dll中導出的函數不同。
用__stdcall聲明的導出的時候函數名稱不會有變化,
而採用第二種的方法時候,系統會在函數名稱前加一個 "_",
等同於 extern "C" __declspec(dllexport) __cdecl int Myfunction_Add(int x,int y)
例如:
.dll內:
extern "C" __declspec(dllexport) __stdcall int Myfunction_Add(int x,int y)
{
int z = x + y;
return z;
}
{
int z = x + y;
return z;
}
在調用程式.cpp :
int (*Myfunction_Add)(int,int);
HINSTANCE hInst=LoadLibrary("my.dll");
(FARPROC &) Myfunction_Add = GetProcAddress(hInst, "Myfunction_Add");
(FARPROC &) Myfunction_Add = GetProcAddress(hInst, "Myfunction_Add");
int sum = Myfunction_Add(10,20);
ShowMessage(sum);
ShowMessage(sum);
FreeLibrary(hInst);
注意:如果聲明的時候不用__stdcall,
則在(FARPROC &) Myfunction_Add = GetProcAddress(hInst, "Myfunction_Add");中在Myfunction_Add前加下劃線。
變成(FARPROC &) Myfunction_Add = GetProcAddress(hInst, "_Myfunction_Add");
則在(FARPROC &) Myfunction_Add = GetProcAddress(hInst, "Myfunction_Add");中在Myfunction_Add前加下劃線。
變成(FARPROC &) Myfunction_Add = GetProcAddress(hInst, "_Myfunction_Add");
留言
張貼留言