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();	
}
原文地址:https://www.cnblogs.com/wucg/p/1950229.html