zoukankan      html  css  js  c++  java
  • 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函数的调用方式一样.

     

  • 相关阅读:
    too many open files linux服务器 golang java
    fasthttp 文档手册
    syncer.go
    grpc.go
    stm.go
    session.go
    mutex.go
    [HTML5]label标签使用以及建议
    禁止使用finalize方法
    [支付宝]手机网站支付快速接入
  • 原文地址:https://www.cnblogs.com/lvpblog/p/2473322.html
Copyright © 2011-2022 走看看