Windows Api学习笔记-动态连接库(DLL)的使用

简介: #include #include #include "12dll.h" using namespace std; #pragma comment(lib,"12Dll")//要链接到什么库文件 void main() { //CMy12Dll a; cout
#include <windows.h>
#include <iostream>
#include "12dll.h"
using namespace std;

#pragma comment(lib,"12Dll")//要链接到什么库文件

void main()
{
	//CMy12Dll a;
	cout<<fnMy12Dll()<<endl;
	char b;
	cin>>b;
}

VS2008

新建WIN32项目

选择动态连接库

应用程序类型为:WINDOWS 应用程序

附加选项为:导出符号

dllmain.cpp中有动态连接库的入口函数

BOOL APIENTRY DllMain(HANDLE hModule,//DLL模块句柄
					  DWORD ul_reason_for_all,//调试原因
					  LPVOID lpReserved//没有使用
					  )
{
	switch(ul_reason_for_all)
	{
	case DLL_PROCESS_ATTACH://动态链接库刚被映射到某个进程的地址空间
		g_hModule = (HMODULE)hModule;
		break;
	case DLL_PROCESS_DETACH://动态链接库将被卸载
		break;
	}
	return TRUE;
}

 

动态连接库的主要逻辑函数如下:

#include "stdafx.h"
#include "12Dll.h"

// 这是导出变量的一个示例
MY12DLL_API int nMy12Dll=12345;

// 这是导出函数的一个示例。
MY12DLL_API int fnMy12Dll(void)
{
	return 67890;
}

// 这是已导出类的构造函数。
// 有关类定义的信息,请参阅 12Dll.h
CMy12Dll::CMy12Dll()
{
	return;
}

动态链接库的逻辑函数是通过如下代码在头文件中公开给外部的

// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 MY12DLL_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// MY12DLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef MY12DLL_EXPORTS
#define MY12DLL_API __declspec(dllexport)
#else
#define MY12DLL_API __declspec(dllimport)
#endif

// 此类是从 12Dll.dll 导出的
class MY12DLL_API CMy12Dll {
public:
	CMy12Dll(void);
	// TODO: 在此添加您的方法。
};

extern MY12DLL_API int nMy12Dll;

MY12DLL_API int fnMy12Dll(void);

如何使用刚刚创建的DLL

有两种办法

一:

把DLL,LIB,和声明导出函数的头文件一起复制到工程文件的主目录下

然后引入头文件

然后就可以想使用自己的函数一样使用动态连接库中的函数了

代码如下 

#include <windows.h>
#include <iostream>
#include "12dll.h"
using namespace std;

#pragma comment(lib,"12Dll")//要链接到什么库文件

void main()
{
	//CMy12Dll a;
	cout<<fnMy12Dll()<<endl;
	char b;
	cin>>b;
}

二:

在DLL工程中加入一个def文件

名字可以随便起

内容如下:

LIBRARY	"12Dll"
EXPORTS
  fnMy12Dll

重新生成DLL工程

重新开被到目标工程

目标工程代买改为如下

#include <windows.h>
#include <iostream>
using namespace std;

typedef int (*my_dll_func)(void);//预定义函数的名字

void main()
{
	HMODULE hModule = ::LoadLibrary("F:\\test\\10test\\10test\\12Dll.dll");
	if(hModule != NULL)
	{
		my_dll_func mf = (my_dll_func)::GetProcAddress(hModule,"fnMy12Dll");
		if(mf != NULL)
		{
			cout<<mf()<<endl;
		}		
	}
	char b;
	cin>>b;
}

运行就看到答案了

目录
相关文章
|
9月前
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
907 130
|
安全 数据安全/隐私保护 Windows
如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡
如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡
1317 16
如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡
|
10月前
|
域名解析 JSON API
【干货满满】如何处理requests库调用API接口时的异常情况
在调用 API 时,网络波动、服务器错误、参数异常等情况难以避免。本文提供一套系统化的异常处理方案,涵盖 requests 库常见异常类型、处理策略、实战代码与最佳实践,通过分类处理、重试机制与兜底策略,提升接口调用的稳定性与可靠性。
|
自动驾驶 程序员 API
告别重复繁琐!Apipost参数描述库让API开发效率飙升!
在API开发中,重复录入参数占用了42%的时间,不仅效率低下还易出错。Apipost推出的参数描述库解决了这一痛点,通过智能记忆功能实现参数自动填充,如版本号、分页控制、用户信息等常用字段,大幅减少手动输入。支持Key-Value与Raw-Json格式导入,一键提取响应结果至文档,将创建20参数接口文档时间从18分钟缩短至2分钟。相比Postman需手动搜索变量,Apipost的参数复用响应速度仅0.3秒,且支持跨项目共享与实时纠错,真正实现“一次定义,终身受益”。
|
8月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
320 11
|
监控 API 计算机视觉
CompreFace:Star6.1k,Github上火爆的轻量化且强大的人脸识别库,api,sdk都支持
CompreFace 是一个在 GitHub 上拥有 6.1k Star 的轻量级人脸识别库,支持 API 和 SDK。它由 Exadel 公司开发,基于深度学习技术,提供高效、灵活的人脸识别解决方案。CompreFace 支持多种模型(如 VGG-Face、OpenFace 和 Facenet),具备多硬件支持、丰富的功能服务(如人脸检测、年龄性别识别等)和便捷的部署方式。适用于安防监控、商业领域和医疗美容等多个场景。
1960 4
|
人工智能 测试技术 API
Windows用户必备:Postman v11详细安装指南与API测试入门教程(附官网下载
Postman是全球领先的API开发与测试工具,支持REST、SOAP、GraphQL等协议调试。2025年最新版v11新增AI智能生成测试用例、多环境变量同步等功能,适用于前后端分离开发、自动化测试、接口文档自动生成及团队协作共享API资源。本文详细介绍Postman的软件定位、核心功能、安装步骤、首次配置、基础使用及常见问题解答,帮助用户快速上手并高效利用该工具进行API开发与测试。
|
人工智能 数据处理 C#
AI Dev Gallery:微软开源 Windows AI 模型本地运行工具包和示例库,助理开发者快速集成 AI 功能
微软推出的AI Dev Gallery,为Windows开发者提供开源AI工具包和示例库,支持本地运行AI模型,提升开发效率。
1090 13
|
API
表情包-API盒子官方资源库版免费API接口教程
该API用于访问API盒子官方资源库中的数十万表情包,支持快速搜索。通过POST或GET请求,用户可按随机或关键词搜索表情包,返回表情包的图片地址等信息。请求需提供用户ID、KEY及搜索类型等参数。示例与详情参见官方文档。
1464 3