【用C语言实现动态库dll生成及调用(VS 2013)】

一、DLL动态库的生成

1.创建一个win32项目,在应用程序向导中选择 【DLL(D)】【空项目(E)】,如下图,注意我创建的项目名称为dynamic。
在这里插入图片描述

2.在创建的项目目录中,有一个dynamic文件夹,在该目录下创建一个字文件夹src,用于存放将要生成DLL文件的相关源码。本例中,创建了两个文件test.c/test.h,此时项目目录和包含的文件如下:
在这里插入图片描述

3.将src路径添加到 【项目】 --> 【dynamic属性】–>【属性配置】–>【VC++目录】–>【可执行文件目录】

4.编辑代码,本文中添加的简单示例函数如下:

注意: 需要被外部调用的函数,在函数声明和函数定义处,均需要添加修饰“__declspec(dllexport)”;否则生成的DLL可被正常加载,但是无法调用内部函数。

test.h 中的内容:

#ifndef __TEST_H__
#define __TEST_H__
// 函数声明处添加修饰:__declspec(dllexport)
__declspec(dllexport) int test_dll(void);
#endif

test.c中的内容:

#include “test.h”
// 函数定义处添加修饰:__declspec(dllexport)
__declspec(dllexport) int test_dll(void)
{
	return 1;
}

5.工具的方案那里选择 【Release】,然后单击菜单栏中 【生成】 --> 【生成解决方案】/ 【重新生成解决方案】,一切顺利的话,在输出框会提示DLL已经生成,如下图所示:
在这里插入图片描述

6.至此,在项目目录下的 Release 文件夹下,可以找到我们的DLL文件,本利中为dynamic.dll

二、DLL动态库的调用

1.创建一个win32控制台程序,同样在应用程序向导中勾选 【控制台应用程序(O)】,和 【空项目(E)】,本文示例中创建的项目名称为testdll。

2.在项目目录下创建一个main.c和一个lib文件夹用于存放DLL文件,同时将上一节生成的DLL文件复制到lib文件夹中。此时项目的目录结构及文件如下:
在这里插入图片描述

3.编辑main.c,本例代码如下:

#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>	// 一定要包含Windows头文件

int main(void)
{
	// 定义函数指针
	int(*p_test_dll)(void) = NULL;
	
	// 加载DLL文件
	HMODULE package = LoadLibraryA("./lib/dynamic.dll");
	if(!package) { printf("DLL动态链接库加载失败!"); }

	// 将函数指针指向dll中的函数
	p_test_dll = (void(*)(void))GetProcAddress(package, "test_dll");

	// 调用dll中的函数
	int err = p_test_dll();
	return 0;
}

4.将lib路径添加到 【项目】 -->【testdll属性】 -->【配置属性】 --> 【VC++目录】 --> 【可执行文件目录】

5.运行项目

三、参考文献:

[1] VS2013生成、使用dll,lib文件

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要封装一个C语言的动态链接库(DLL),需要进行以下步骤: 1. 创建一个新的C语言项目,将需要封装的函数实现在该项目中。 2. 在项目属性中,将输出类型设置为DLL。 3. 编译项目,生成DLL文件。 4. 创建一个包含需要调用DLL函数的头文件的项目。 5. 在该项目中包含DLL的头文件,链接DLL库,并调用其中的函数。 下面是一个简单的示例: ```c // 封装的函数,将两个整数相加 int add(int a, int b){ return a + b; } ``` 在Visual Studio中,创建新项目时可以选择DLL项目类型,也可以创建普通C语言项目后,进入项目属性->配置属性->常规,将输出类型改为DLL。 在生成DLL后,需要将生成DLL文件和头文件提供给其他开发人员使用。其他开发人员只需要包含头文件,并在链接时链接DLL库即可调用函数。例如: ```c #include <stdio.h> #include "mydll.h" // 封装的DLL的头文件 void main(){ int a = 1, b = 2; int result = add(a, b); // 调用封装的函数 printf("%d + %d = %d\n", a, b, result); } ``` 在链接时需要将DLL库链接进来,可以在Visual Studio中将DLL库添加到链接器->输入->附加依赖项中,或者使用命令行参数-l来链接库。例如: ``` gcc main.c mydll.lib -o main ``` 需要注意的是,封装DLL时需要考虑函数的可见性,一般使用__declspec(dllexport)来声明需要导出的函数。例如: ```c __declspec(dllexport) int add(int a, int b){ return a + b; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值