cpp dllエクスポート関数またはクラス_stdcall

1483 ワード

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

}