当前位置:   article > 正文

C语言创建和调用dll动态库_c语言调用dll

c语言调用dll

前言

 C++在调用Dll中的函数的时候,如果是企业内部的话,肯定是希望三件套的方式(.h\.lib\.dll)。这样做的话,编写方可以在头文件中写入很多信息,方便调用方的调用。但是,一旦是给其他公司的人使用,而不想让别人看到的话,那编写方肯定是不想让别人看到过多的信息的,你只管调用。

   还有一点是 dll是在调试的时候使用的,lib是编译的时候使用的,两者是不同时期使用的工具

写这个单纯为了我自己理解

1.创建dll

首先创建一个空的DLL文件,创建方法:新建——项目——Win32控制台程序——然后取个名字——确定——下一步——选择DLL——勾选空白项目。顺利新建了名字为Dll1的项目。项目中有这些东西(VS2017)

 添加头文件Dll1.h 在头文件中添加导出函数add函数

  1. #pragma once
  2. extern "C" __declspec(dllexport) int add(int a, int b);
  3. //extern "C" 是表示C语言代码,优点通常调用动态库不改变函数名,具体的找相关文献
  4. //_declspec(dllexport) 导出函数,我是这么理解的

 现在我们在Dll1.cpp文件中进行实现

  1. #include "Dll1.h"
  2. int add(int a, int b) {
  3. return a + b;
  4. }

然后编译,不过注意平台的设置

(根据需求选择)

/*

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中加入以下代码:

  1. //静态调用DLL库的方法
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <Windows.h>
  5. #pragma comment(lib,"Dll1.lib")//表示链接Dll1.lib这个库。
  6. //(注意数字1和字母l)
  7. /*
  8. 更多关于#pragma comment()的去看链接
  9. 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
  10. */
  11. extern "C" __declspec(dllimport) int __stdcall add(int a, int b);
  12. //__declspec(dllimport) 导入包
  13. // 静态调用DLL库
  14. void main()
  15. {
  16. int sum = add(10, 20);
  17. printf("静态调用,sum = %d\n", sum);
  18. }

 2.2 调用dll动态库方法二

 只用在项目下添加Dll1.dll不需要Dll1.lib

  1. #include <iostream>
  2. #include<Windows.h>
  3. int main()
  4. {
  5. HMODULE h = NULL;//创建一个句柄h
  6. h = LoadLibrary("Dll1.dll");
  7. if (h == NULL)//检测是否加载dll成功
  8. {
  9. printf("加载DLLTest1.dll动态库失败\n");
  10. return -1;
  11. }
  12. typedef int(*AddFunc)(int, int); // 定义函数指针类型
  13. AddFunc add;
  14. // 导出函数地址
  15. add = (AddFunc)GetProcAddress(h, "add");
  16. int sum = add(100, 200);
  17. printf("动态调用的结果%d\n", sum);
  18. return 0;
  19. }

总结:

文章来源于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

2.创建动态链接库(dll)_独步天秤的博客-CSDN博客_创建动态链接库

3.C/C++动态链接库(DLL)详解_独步天秤的博客-CSDN博客_c++动态链接库

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/204308
推荐阅读
相关标签
  

闽ICP备14008679号