C++之创建与使用dll

目录

1、创建dll

test.h

test.cpp

Source.def

2、使用dll

testdll.cpp


DLL,全称“Dynamic Link Library”,中文名为“动态链接库”,是一种在Windows操作系统中常见的库文件格式。它包含了可以由多个程序同时使用的代码和数据。与静态链接库(Static Link Library,.lib文件)不同,动态链接库在程序运行时才被加载到内存中,因此可以节省内存空间,并允许程序在不重新编译的情况下更新库文件。

DLL文件通常包含以下类型的函数和数据:

导出函数:这些函数可以由其他程序调用。它们被编译并包含在DLL中,以便其他程序可以通过动态链接来调用它们。

资源:DLL可以包含图标、位图、字符串等资源,这些资源可以被其他程序使用。

数据:DLL也可以包含共享数据,这些数据可以在多个程序之间共享。

使用DLL的好处包括:

资源共享:多个应用程序可以同时使用同一个DLL中的函数和数据,从而节省磁盘和内存空间。

模块化:DLL允许将代码划分为独立的模块,这使得代码更易于管理和维护。

插件化:应用程序可以使用DLL作为插件来扩展其功能,而无需修改应用程序本身。

版本控制:通过更新DLL文件,可以在不重新编译整个应用程序的情况下更新程序的功能。

然而,使用DLL也需要注意一些问题,如DLL的依赖管理、版本冲突以及安全性等。

1、创建dll

创建mydll工程,移除默认文件,添加以下文件

test.h

#ifdef MYDLL_EXPORTS#define MATH_API __declspec(dllexport)#else#define MATH_API __declspec(dllimport)#endifMATH_API int Add(int a, int b);MATH_API int Sub(int a, int b);

test.cpp

#include "test.h"int Add(int a, int b) {  return a + b;}int Sub(int a, int b) {  return a - b;}

Source.def

LIBRARYEXPORTSAddSub

编译后生成mydll.lib和mydll.dll文件

2、使用dll

创建控制台项目,添加以下文件

testdll.cpp

#include <iostream>
#include "windows.h"
​
typedef int (*lpAddFun)(int, int);//宏定义函数指针类型
typedef int (*lpSubFun)(int, int);//宏定义函数指针类型
​
int main()
{
  std::cout << "Hello World!\n";
  HINSTANCE hDll;//DLL 句柄
  lpAddFun addFun;//函数指针
  lpSubFun subFun;//函数指针
  hDll = LoadLibrary(L"mydll.dll");//动态获取dll文件的路径
  if (hDll != nullptr)
  {
    addFun = (lpAddFun)GetProcAddress(hDll, "Add");//根据函数名在dll文件中获取该函数的地址  
    subFun = (lpSubFun)GetProcAddress(hDll, "Sub");
    if (addFun != nullptr)
    {
      int result = addFun(2, 3);
      int result2 = subFun(10, 6);
      printf("2+3=%d\n", result);
      printf("10-6=%d", result2);
    }
​
    FreeLibrary(hDll);
  }
  return 0;
}
​

将mydll.lib和mydll.dll文件拷贝到exe文件所在目录下

Hello World!

2+3=5

10-6=4

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值