一、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.运行项目