动态链接库的生成与使用(动态、静态调用)附上一种常见错误。。。

本篇内容总结了动态链接库的生成与使用。

一.动态链DLL接库生成

  1. 首先,新建Win32 DLL 空项目
  2. 添加头文件和源文件,这里写一个printMAX作为测试
//myDll.h
#pragma once
extern "C" _declspec(dllexport)  int printMax(int, int);
//myDll.cpp
#include<iostream>
using  std::cout ;
using  std::endl;

extern "C" _declspec(dllexport) 
int printMax(int a, int b) 
{
   
	cout << "the max number is: " << ((a>b) ? a : b) << endl;
	return 0;
}

头文件和源文件添加完成后,运行,可以看到,已经生成了myDll.dll

此时也可以看到目标debug目录下面生成dll和lib文件,如果只有dll,而没有lib,大概率是出现了这个问题

二.动态链DLL测试
在解决方案上右键,添加新项目myDllTest,作为测试dll的项目,右键设为启动项目

  1. 动态库的动态调用
    动态调用dll,只需要一个dll文件即可,首先使用LoadLibrary,加载动态库,然后使用GetProcAddress,得到函数的地址;
#include<Windows.h> 
#include<iostream>
using namespace std;

int main()
{
   
	//加载dll
	HMODULE module = LoadLibrary(TEXT("..\\Debug\\myDll.dll")); 
	if (module == NULL)
	{
   
		cout << "load dll error!" << endl;
		FreeLibrary(module);
		return 1;
	}
	//从dll中导出函数地址
	typedef void(*printMaxFunc)(int, int); // 定义函数指针类型
	printMaxFunc printMax;
	printMax = (printMaxFunc)GetProcAddress(module, "printMax");
	GetLastError();
	if (printMax == NULL)
	{
   
		cout << "get dll error!" << endl;
		FreeLibrary(module);
		return 1;
	}
	//测试dll
	int c = 3;
	int d = 2;
	printMax(c, d);
	//释放
	FreeLibrary(module);//与LoadLibrary成对出现,颇有new delete的意思
	return 0;
}

  1. 动态库的静态调用
    动态库的静态调用,需要dll lib h文件。
    同样在解决方案上右键新建项目myDllTest2,作为测试静态调用的工程,右键设为启动文件。
    首先需要自己把myAdd.h文件人为添加到文件夹myDllTest2里面,然后新建测试cpp文件
#include<iostream>
#include"myAdd.h"
using namespace std;

#pragma comment (lib,"..\\Debug\\myDll.lib")

int main()
{
   
	int c = 3;
	int d = 2;
	printMax(c, d);
	return 0;
}


附上我的完整工程,可下载使用,采用vs2015

CSDN博客搬运 文章被收录于专栏

CSDN博客搬运

全部评论

相关推荐

乐观的打工人前程似锦:怎么说呢🤔️,学历够,专业技能看起来也有那么回事,就是项目会不会差点?dji更喜欢较为复杂的工程落地的项目吧?如果有一些title的项目就更好了。有实习也是加分项,搞过神经网络应该也是加分项。进面应该可以,还是要看技术过硬
点赞 评论 收藏
分享
01-15 17:34
保定学院 Java
数学转码崽:学历没优势就得卷项目和实习啊,但是我看了一下你这个项目,什么雪花算法,搜索引擎,Docker,minio这些都属于通用的东西啊,根本不算亮点,没有任何业务相关性。 还有第二个看到统一鉴权,分片上传估计面试官都不想看了。连我一个偶尔刷刷牛客简历的都看多了,面试官估计早都看吐了。。。 秋招结束了,就尽量找找中小厂吧,毕竟你现在转行已经没时间了,高低有一段实习经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务