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

原文地址:https://www.cnblogs.com/liuruoqian/p/15128275.html