赞
踩
C++在调用Dll中的函数的时候,如果是企业内部的话,肯定是希望三件套的方式(.h\.lib\.dll)。这样做的话,编写方可以在头文件中写入很多信息,方便调用方的调用。但是,一旦是给其他公司的人使用,而不想让别人看到的话,那编写方肯定是不想让别人看到过多的信息的,你只管调用。
还有一点是 dll是在调试的时候使用的,lib是编译的时候使用的,两者是不同时期使用的工具
写这个单纯为了我自己理解
首先创建一个空的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。
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);
- }
只用在项目下添加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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。