前言
C++在调用Dll中的函数的时候,如果是企业内部的话,肯定是希望三件套的方式(.h\.lib\.dll)。这样做的话,编写方可以在头文件中写入很多信息,方便调用方的调用。但是,一旦是给其他公司的人使用,而不想让别人看到的话,那编写方肯定是不想让别人看到过多的信息的,你只管调用。
还有一点是 dll是在调试的时候使用的,lib是编译的时候使用的,两者是不同时期使用的工具
写这个单纯为了我自己理解
1.创建dll
首先创建一个空的DLL文件,创建方法:新建——项目——Win32控制台程序——然后取个名字——确定——下一步——选择DLL——勾选空白项目。顺利新建了名字为Dll1的项目。项目中有这些东西(VS2017)
添加头文件Dll1.h 在头文件中添加导出函数add函数
#pragma once
extern "C" __declspec(dllexport) int add(int a, int b);
//extern "C" 是表示C语言代码,优点通常调用动态库不改变函数名,具体的找相关文献
//_declspec(dllexport) 导出函数,我是这么理解的
现在我们在Dll1.cpp文件中进行实现
#include "Dll1.h"
int add(int a, int b) {
return a + b;
}
然后编译,不过注意平台的设置
(根据需求选择)
/*
x86、x64的区别:
x86平台编译出来的exe(可执行文件)或dll(动态链接库)都是32位的;x64对应的则是64位的。
若你的启动项目,即主程序(编译出来是exe文件的)是x86平台下编译的,而它所依赖的一个项目(或动态链接库)是由x64位平台编译出来的,则会提示“未能加载文件或程序集...或它的某一个依赖性。试图加载格式不正确的程序。”之类的错误。这是因为32位程序不能加载64位的dll,更不能调用其中的类、方法和对象等。反之,若主程序是由x64平台编译出来的,而dll是x86的呢?答案。。也是不行的!
————————————————
版权声明:本文为CSDN博主「疯子的仰望」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/admainzl/article/details/101850906
*/
尽量和调用方一致嗷,避免白给。
然后点击生成
在x64——deBug目录下 找到Dll1.dll和Dll1.lib。
2.1 调用dll动态库方法一
Dll编写我们算是结束了 接下来需要重新新建一个Win32的控制台程序取名字为Test
先在项目下添加Dll1.dll和Dll1.lib(两个文件必须和软件放在同一文件夹)
然后在Test.cpp中加入以下代码:
//静态调用DLL库的方法
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#pragma comment(lib,"Dll1.lib")//表示链接Dll1.lib这个库。
//(注意数字1和字母l)
/*
更多关于#pragma comment()的去看链接
https://blog.csdn.net/weixin_34405925/article/details/86285203?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163913902116780271950822%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163913902116780271950822&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-86285203.first_rank_v2_pc_rank_v29&utm_term=%23pragma+comment&spm=1018.2226.3001.4187
*/
extern "C" __declspec(dllimport) int __stdcall add(int a, int b);
//__declspec(dllimport) 导入包
// 静态调用DLL库
void main()
{
int sum = add(10, 20);
printf("静态调用,sum = %d\n", sum);
}
2.2 调用dll动态库方法二
只用在项目下添加Dll1.dll不需要Dll1.lib
#include <iostream>
#include<Windows.h>
int main()
{
HMODULE h = NULL;//创建一个句柄h
h = LoadLibrary("Dll1.dll");
if (h == NULL)//检测是否加载dll成功
{
printf("加载DLLTest1.dll动态库失败\n");
return -1;
}
typedef int(*AddFunc)(int, int); // 定义函数指针类型
AddFunc add;
// 导出函数地址
add = (AddFunc)GetProcAddress(h, "add");
int sum = add(100, 200);
printf("动态调用的结果%d\n", sum);
return 0;
}
总结:
无
文章来源于C/C++:Windows编程—调用DLL程序的2种方法_李四老师-CSDN博客_c++ 调用dll
和C/C++写dll文件_Vaxy-CSDN博客_c 写dll
扩展1.Dev c++工具将C代码生成dll文件以及如何调用dll文件_Forward no stop -CSDN博客_devc++ dll