• DLL相关注意


    Dynamic Library.h

    源码如下:

    #pragma once
    //extern "C" _declspec(dllexport) int _stdcall add(int a=10,int b=10); //利用关键字导出

    //extern __declspec(dllexport) int i;
    class _declspec(dllexport) DLLTest        //利用关键字导出类
    {
    public:
    int a;
    DLLTest();
    ~DLLTest();
    };

    Dynamic Library.cpp

    源码如下:

    #include <windows.h>
    #include <iostream.h>
    #include "Dynamic Library.h"

    int i=200;

    extern "C" _declspec(dllexport) int _stdcall add(int a,int b)
    {
    return a+b;
    }

    extern "C" _declspec(dllexport) int dec(int a,int b)  
    {
    return a-b;
    }

    DLLTest::DLLTest()
    {
    cout<<"Construct DLLTest Object"<<endl;
    }

    DLLTest::~DLLTest()
    {
    cout<<"Destructor"<<endl;
    }

    DEF文件中源码:

    LIBRARY "Dynamic Library"

    EXPORTS
    i DATA    ;导出全局变量

    Link Dynamic.cpp

    源码如下:

    #include <windows.h>
    #include "Dynamic Library.h"    //加载静态DLL  或者 静态调用 需要加载头文件
    #include <iostream>
    using namespace std;

    #pragma comment(lib,"Dynamic Library.lib")  //连接LIB文件

    typedef int (_stdcall *lpAdd)(int a,int b);    
    typedef int (*lpDec)(int a,int b);

    extern _declspec(dllimport) int i; //导入DLL中全局变量
    class _declspec(dllimport) DLLTest; //导入DLL中的类

    void main()
    {
    lpAdd addFun;
    lpDec decFun;
    DLLTest aa;
    // cout<<i<<endl;
    HINSTANCE hDll=LoadLibrary("Dynamic Library.dll"); //动态加载DLL

    addFun=(lpAdd)GetProcAddress(hDll,"_add@8");  //获取函数指针地址
    cout<<addFun(1,2)<<endl;             //调用DLL函数

    decFun=(lpDec)GetProcAddress(hDll,"dec");
    cout<<decFun(3,3)<<endl;
    FreeLibrary(hDll);
    }

    以上为调用动态DLL.

    注意: 1.Extern "C" 和_stacall 的含义.(命名方式和调用方式)

        2.隐式调用需要加载DLL文件和LIB文件以及头文件,用关键字 _declspec(dllimport) 可向预编译文件导入DLL中的对象和类.

        3.函数的调用方式要和DLL函数的调用方式一样.

     

  • 相关阅读:
    MySQL启动和关闭命令总结
    MySQL数据库5.6版本首次安装Root密码问题
    tomcat 9性能调优注意事项
    扫除减脂之路上的几个小障碍
    MySQL常见面试题
    关于邮箱发送邮件二之附件及图片
    关于邮箱发送邮件
    关于算法
    python中常见的数据类型
    C++实现复数类的输入输出流以及+-*/的重载
  • 原文地址:https://www.cnblogs.com/lvpblog/p/2473322.html
Copyright © 2020-2023  润新知