cpp dll导出函数或类 _stdcall
_stdcall为windows函数调用标准,PASCAL,WINAPI相同。
C的默认调用约定为 _cdecl
dll项目:
//MyDll.h #ifdef MyDll_Header #else #define MyDll_Header extern "C" _declspec(dllimport) #endif MyDll_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(); }