zoukankan      html  css  js  c++  java
  • Windows 之Dll/lib导出

    DLL导出del方式部分:

    右键新建dll项目,然后右键工程属性选择-实用工具-文本文件---->修改为Text.def

    接着在def文件中输入下面的导出接口声明,以及dll名字

    Def方式生成dll

    Text.def
    LIBRARY ExportDllDemo
    EXPORTS
    ShowMessageBox @1

    dllmain.cpp

    void ShowMessageBox()
    {
      MessageBox(NULL, L"fuck work", L"tips", 0);
    }

    //以上准备好导出dll的数据

    新建一个控制台程序,loadingDllDemo.cpp

    typedef int(*ShowMessageBox)();

    int main()
    {

      HMODULE hm = LoadLibrary(L"ExportDllDemo.dll");
      if (hm == NULL)
      {
        printf("Library Error ! ");
        return 0;
      }
      ShowMessageBox SMessageBox = (ShowMessageBox)GetProcAddress(hm, "ShowMessageBox");
      DWORD res = GetLastError();

      if(SMessageBox)
        SMessageBox();

      system("pause");
    }

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    非Def方式生成Dll

    声明dll为导出接口:

    #ifdef __cplusplus
    extern "C" {
    #endif
    #ifdef    DLL_EXPORT
    #else
    #define    DLL_EXPORT _declspec(dllexport)
    #endif

            DLL_EXPORT void ShowMessageBox();

    #ifdef __cplusplus
    }
    #endif

    dllmain里定义 void ShowMessageBox();

    新建一个控制台程序,loadingDllDemo.cpp

    typedef void(*ShowMessageBox)();

    int main()
    {
      std::cout << "Hello World! ";
      HMODULE hm = LoadLibrary(L"ExportDllDemoEx.dll");
      if (hm == NULL)
      {
        printf("Library Error ! ");
        return 0;
      }
      ShowMessageBox SMessageBox = (ShowMessageBox)GetProcAddress(hm, "ShowMessageBox");
      DWORD res = GetLastError();

      if (SMessageBox)
        SMessageBox();

      system("pause");
    }

    如果需要对dll加密处理,使用非对称加密方式,dll预留一个init接口,用来校验获取初始化的句柄,每次使用dll的接口都需要把初始化的句柄带上校验。

     ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    VS新建-桌面程序-静态库:

    pch.h

      声明方法

      #ifndef PCH_H
      #define PCH_H
      void ShowMessageBox();
      #endif //PCH_H

    pch.cpp

           定义方法

    #include "pch.h"
    #include <windows.h>

    void fnExportLibDemo()
    {
      MessageBox(NULL, L"fuck lib", L"tips", 0);
    }
    void ShowMessageBox()
    {
      MessageBox(NULL, L"hello lib", L"tips", 0);
    }

    环境配置

        1、添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录。

        2、添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件存放目录。
             然后添加工程引用的lib文件名:工程---属性---配置属性---链接器---输入---附加依赖项:加上lib文件名。

    loadplugindemo.cpp

    #pragma comment(lib,"ExportLibDemo.lib")

    int main()
    {
        ShowMessageBox();
        system("pause");
    }

    使用lib或者dll优势、区别,加密如下:

  • 相关阅读:
    [Chrome_OS]Crosh Shell终端 基础命令
    [HTML5_WebSockets]HTML 5 Web Sockets应用初探
    [HTML5_WebWorkers]利用HTML5的window.postMessage实现跨域通信
    [HTML5_资源]49个超炫的HTML 5示例
    [HTML5_资源]国外模版网站
    [HTML5_JS跨域]JavaScript跨域总结与解决办法
    [HTML5_资源]给网页设计师的30个HTML5学习资源
    [HTML5_WebWorkers]HTML5 web通信(跨文档通信/通道通信)简介
    [HTML5_JQueryMobile]20个很棒的 jQuery Mobile 教程
    LeetCode-513. Find Bottom Left Tree Value
  • 原文地址:https://www.cnblogs.com/liuruoqian/p/15128275.html
Copyright © 2011-2022 走看看