cpp dllエクスポート関数またはクラス_stdcall
1483 ワード
_stdcallはwindows関数呼び出し基準で、PASCAL、WINAPIは同じです.
Cのデフォルト呼び出し規則は_cdecl
dllプロジェクト:
呼び出し元:
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();
}