_stdcall為windows函數調用標準,PASCAL,WINAPI相同。
C的預設呼叫慣例為 _cdecl
dll項目:
//MyDll.h#ifdef MyDll_Header#else#define MyDll_Header extern "C" _declspec(dllimport) #endifMyDll_Header int _stdcall add(int a,int b);MyDll_Header int _stdcall substract(int a,int b);/*class MyDll_Header Point{public:Point(int a,int b):x(a),y(b){}void output();private:int x,y;};*/////////////////////////////////////////////////////////////////////////////////////////MyDll.cpp#define MyDll_Header extern "C" _declspec(dllexport) #include "MyDll.h"#include "windows.h"#include "stdio.h"int _stdcall add(int a,int b){return a+b;}int _stdcall substract(int a,int b){return a-b;}/*可匯出類或類的成員函數void Point::output(){HWND handle = GetForegroundWindow();HDC dc = GetDC(handle);char buf[20];sprintf(buf,"x=%d,y=%d",this->x,this->y);TextOut(dc,0,0,buf,strlen(buf));ReleaseDC(handle,dc);}*/
調用者:
//Client.cpp#include "MyDll.h"//...void CMyDllTestDlg::OnButtonAdd() {CString str;str.Format("5+3=%d",add(5,3));MessageBox(str);}void CMyDllTestDlg::OnButtonSubstract() {CString str;str.Format("5-3=%d",substract(5,3));MessageBox(str);}void CMyDllTestDlg::OnBUTTONOutput() {// Point pt(11,3222);// pt.output();}