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了面使用msgbox会有问题

  std::cout<<"hello hello i am exaple dll"<<std::endl;
}

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

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

 

typedef void(*ShowMessageBox)();

int main()
{

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

  if(SMessageBox)
    SMessageBox();

  system("pause");
}

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

非Def方式生成Dll

声明dll为导出接口:

用法:   extern "C" void __declspec(dllexport) ShowMessageBox();

 

dllmain里定义 void ShowMessageBox();

 

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

typedef void(*ShowMessageBox)();

int main()
{
  std::cout << "Hello World!\n";
  HMODULE hm = LoadLibrary(L"ExportDllDemoEx.dll");
  if (hm == NULL)
  {
    printf("Library Error !\n");
    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优势、区别,加密如下:

 

posted on 2021-08-11 15:08  流若浅  阅读(424)  评论(0编辑  收藏  举报

导航