zoukankan      html  css  js  c++  java
  • 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();	
    }
    
  • 相关阅读:
    redis中文API
    基于redis的分布式锁
    redis安装使用配置
    windows常用命令
    curl命令详解
    linux远程连接
    memcache在大型网站的应用策略
    缓存使用的一些注意事项
    记录memcache分布式策略及算法
    U盘安装Centos7.0图解
  • 原文地址:https://www.cnblogs.com/wucg/p/1950229.html
Copyright © 2011-2022 走看看