• Dll 导出函数 引用Dll外部函数声明


    导出函数

    _declspec(dllexport) int function()

    导出类

    class _declspec(dllexport) class1

    引用Dll函数声明

    _declspec(dllimport) int function()

    解决不同编译器名字改编的问题

    在定义导出函数时加上 extern "C" (大写C),如 extern "C" _declspec(dllexport) int function()

    但这种方法有一个缺陷,不能用于导出一个类的成员函数,只能用于导出全局函数这种情况。

    标准调用约定_stdcall

    于是可以声明为 extern "C" _declspec(dllexport) int _stdcall function()

    最终解决 采用模块定义文件(DEF)

    如在Dll2工程中添加Dll2.def文件

    Dll2.def 文件内容可以如下:

    LIBRARY Dll2

    EXPORT

    function()

    显示加载方式加载Dll

    LoadLibary函数 例如:

     HINSTANCE hInst=LoadLibrary(_T("User32.DLL"));
     if(hInst)
     { 
        typedef  BOOL (WINAPI * MYFUNC)(HWND,COLORREF,BYTE,DWORD); 
        MYFUNC fun=NULL; 
        //取得SetLayeredWindowAttributes函数指针 
        fun=(MYFUNC)GetProcAddress(hInst,"SetLayeredWindowAttributes"); 
        if(fun) 
         {
           fun( this->GetSafeHwnd(), RGB(255,0,255)   , 0 , LWA_COLORKEY );
        }
        FreeLibrary(hInst);
     }

    根据序号访问Dll中的导出函数

    MAKEINTRESOURCE宏把指定的函数序号转换为相应的函数名字字符串,这里的函数序号就是在Dll中声明的导出函数序号。

  • 相关阅读:
    批量修改文件的名字
    字节码指令以及操作数栈的分析
    字节码文件的分析
    类加载器详解
    类的加载-连接-初始化
    电商订单ElasticSearch同步解决方案--使用logstash
    springboot整合Mangodb实现crud,高级查询,分页,排序,简单聚合
    mongodb安装教程(亲测有效)
    Azure : 通过 SendGrid 发送邮件
    用java实现删除目录
  • 原文地址:https://www.cnblogs.com/pbreak/p/1750571.html
Copyright © 2020-2023  润新知