• DLL基本开发规则


    1、显示调用DLL方式:

    typedef float (*MyCalculate)(float,float,int); //宏定义floatcalculate函数指针类型
    HINSTANCE hdll; //DLL的句柄
    MyCalculate calfunc;//函数指针
    hdll=LoadLibrary("..\\debug\\FloatCalDLL.dll"); //LoadLibrary函数装载DLL
    if(hdll!=NULL)
    {
    //GetProcAddress函数获得calculate函数地址
    calfunc=(MyCalculate)GetProcAddress(hdll,"floatcalculate");//floatcalculate函数名
    }
    else
    {
    AfxMessageBox("无法加载DLL");
    return;
    }
    UpdateData(true);
    m_floResult=calfunc(m_floNum1,m_floNum2,m_radio);

    2、隐式调用DLL方式:

    A1#include "calculate.h"

    #pragma comment(lib,"FloatCalDLL.lib") //通知编译器DLL的.lib文件所在的路径及文件名

    A2extern"C" _declspec(dllimport) float floatcalculate(float x,float y,int type);//声明导入函数

    A1,A2至少要有一个

    floatcalculate(10,10,10);

    3、导出全局变量:

    ExternVal.cpp

    char* myVar;

    ExternValDll.def

    ;在DLL中导出变量
    LIBRARY "ExternVarDll"
    DESCRIPTION "实现一个导出变量的DLL"
    EXPORTS
    myVar DATA

    4、导入全局变量:

    HINSTANCE hdll; //DLL的句柄
    hdll=LoadLibrary("..\\debug\\ExternVarDll.dll"); //LoadLibrary函数装载DLL
    if(hdll!=NULL)
    {
    //GetProcAddress函数获得dllVar变量的地址
    m_strVar=*(char**)GetProcAddress(hdll,"myVar"); //获取全局变量
    UpdateData(FALSE);
    FreeLibrary(hdll); //释放DLL
    }
    else
    {
    AfxMessageBox("无法加载DLL!");
    return;
    }

    5、导出类:

    AreaVolumnClass.h

    class _declspec(dllexport) AreaVolumnClass //声明导出类
    {
    public:
    AreaVolumnClass();
    virtual ~AreaVolumnClass();
    double GetArea(); //计算长方体的表面积
    double GetVolumn(); //计算长方体的体积
    void SetLenth(double a); //设置长方体的长
    void SetWidth(double b); //设置长方体的宽
    void SetHeight(double c); //设置长方体的高
    private:
    double lenth; //存储长方体的长
    double width; //存储长方体的宽
    double height; //存储长方体的高

    };

    6、导入类:

    #include "AreaVolumnClass.h" //包含头文件,类在其中声明了
    #pragma comment(lib,"ExportClassDll.lib") //隐式导入DLL

    AreaVolumnClass myclass;

  • 相关阅读:
    Refined Architecture阶段
    将博客搬至CSDN
    第七周学习总结
    struts2框架学习三 ajax
    Data truncation: Truncated incorrect DOUBLE value: '张利杰'
    struts2框架学习二 action对jsp传值
    决策树
    struts2框架学习1
    寒假自学第十五天
    寒假自学第十四天
  • 原文地址:https://www.cnblogs.com/quansir/p/2753205.html
Copyright © 2020-2023  润新知