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

前言

 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

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

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

猜你喜欢

转载自blog.csdn.net/weixin_58503231/article/details/121863927
今日推荐