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优势、区别,加密如下:

  • 相关阅读:
    解决方案-BI:百科
    un-Error-ASP.NET:“/tbm6”应用程序中的服务器错误。
    JS-jQuery-EasyUI-Layout-Tabs:Tabs 标签页/选项卡
    JS-jQuery-EasyUI-Layout:Layout 布局
    jQuery-EasyUI-CSS:Icon 图标
    jQuery-EasyUI:Layout
    JS-jQuery-EasyUI:CSS
    JS-jQuery-EasyUI :目录
    ORM:百科
    ORM- IBatisNet:百科
  • 原文地址:https://www.cnblogs.com/liuruoqian/p/15128275.html
Copyright © 2011-2022 走看看