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();
}

浙公网安备 33010602011771号