一、_stdcall
被這個關鍵字修飾的函數,其參數都是從右向左通過堆棧傳遞的(__fastcall 的前面部分由ecx,edx傳), 函數調用在返回前要由被調用者清理堆棧。
這個關鍵字主要見於Microsoft Visual C、C++。GNU的C、C++是另外一種修飾方式:__attribute__((stdcall))
1.
MathFunsStd.cpp:
int _stdcall add(int a, int b) { return a+b; } int _stdcall subtract(int a, int b) { return a-b; } int _stdcall multiple(int a, int b) { return a*b; }
MathFunsStd.def:
LIBRARY MathFunsStd
EXPORTS
add
subtract
multiple
2.MathFuns.cpp
int add(int a, int b) { return a+b; } int subtract(int a, int b) { return a-b; } int multiple(int a, int b) { return a*b; }
MathFuns.def
LIBRARY MathFuns
EXPORTS
add
subtract
multiple
3.UseHeaderAPI
MathFunsUseHeader.h
#ifdef MathFunsUseHeaderAPI #else #define MathFunsUseHeaderAPI _declspec(dllimport) #endif MathFunsUseHeaderAPI int add(int a,int b); MathFunsUseHeaderAPI int subtract(int a,int b); MathFunsUseHeaderAPI int multiple(int a, int b); #define MathFunsUseHeaderAPI _declspec(dllexport) #include "MathFunsUseHeader.h"
MathFunsUseHeader.cpp
int add(int a, int b) { return a+b; } int subtract(int a, int b) { return a-b; } int multiple(int a, int b) { return a*b; }
三、調用