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;
}

运行就看到答案了

目录
相关文章
|
人工智能 安全 API
Higress MCP Server 安全再升级:API 认证为 AI 连接保驾护航
Higress MCP Server 新增了 API 认证功能,为 AI 连接提供安全保障。主要更新包括:1) 客户端到 MCP Server 的认证,支持 Key Auth、JWT Auth 和 OAuth2;2) MCP Server 到后端 API 的认证,增强第二阶段的安全性。新增功能如可重用认证方案、工具特定后端认证、透明凭证透传及灵活凭证管理,确保安全集成更多后端服务。通过 openapi-to-mcp 工具简化配置,减少手动工作量。企业版提供更高可用性保障,详情参见文档链接。
1664 42
|
8月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
305 11
|
11月前
|
运维 Prometheus 监控
云原生 API 网关 x OKG:游戏连接治理的「最后一公里」
本文介绍了云原生技术在游戏连接治理中的应用,重点探讨了如何通过 OpenKruiseGame(OKG)与云原生 API 网关的结合,实现游戏服务的优雅下线与无感配置变更。文章分析了游戏服务的强状态特性所带来的挑战,并提出了基于状态感知与连接管理的解决方案,保障玩家会话的连续性与体验的稳定性。同时,还介绍了如何通过零改造接入、全栈可观测性与简化的 API 治理,缩短游戏服务云原生化的“最后一公里”。
440 4
|
11月前
|
Java 分布式数据库 Docker
使用Docker配置并连接HBase的Java API
本流程概要的解释了如何在Docker上配置并启动HBase服务,并通过Java API进行连接和操作表,不涉及具体的业务逻辑处理和数据模型设计,这些因应用而异需由开发者根据实际需求进行实现。
484 13
|
11月前
|
运维 Prometheus 监控
API 网关 x OKG:游戏连接治理的「最后一公里」
本文介绍了 API 网关与 OpenKruiseGame(OKG)结合,在云原生游戏场景中实现连接治理“最后一公里”的解决方案。针对游戏服务的有状态特性,该方案通过精细化流量管理和无感变更能力,保障玩家会话连续性,提升运维效率,助力游戏服务实现优雅下线、配置动态更新等功能,同时提供零改造接入和全栈可观测性,显著优化游戏体验与开发运维流程。
429 0
|
12月前
|
XML JSON API
API接口——连接世界,让你的数据畅通无阻!
API(应用程序编程接口)是连接不同软件系统的桥梁,如同数字世界的“万能适配器”。它通过标准化协议(如RESTful)和数据格式(如JSON/XML),实现前端请求与后端服务的无缝交互。API不仅提升了系统间的协作效率,还通过OAuth 2.0等技术保障安全性,并支持流量管控以优化性能。其应用场景广泛,包括金融科技、物联网、电子商务和社会化平台,为企业带来显著效益,如降低成本、提升响应速度和用户增长。未来,API将向智能化、微服务化、低代码集成和隐私计算方向发展,成为构建数字生态的核心技术,助力万物互联时代的创新与发展。
1699 1
|
12月前
|
搜索推荐 安全 API
聚合电商API:一键连接多平台数据
聚合电商API接口平台整合淘宝、天猫、京东等多平台API,提供一站式数据服务。核心功能包括数据整合、多平台搜索、详细解析与定制化服务,助力商家高效管理订单、优化商品推荐及支持数据驱动决策。平台注重智能化、个性化与全渠道发展,保障数据安全,推动业务增长。
1496 2
|
人工智能 JavaScript 测试技术
构建智能 API 开发环境:在 Cursor 中连接 Apifox MCP Server
本文介绍了如何将Apifox MCP Server与Cursor结合,通过AI直接获取和理解API文档,大幅提升开发效率。首先需配置Apifox的Access Token和项目ID,并在Cursor中设置MCP连接。实际应用场景包括快速生成模型代码、同步更新接口文档与代码、生成CRUD操作、搜索API文档及自动生成测试用例。此外,还提供了管理多项目、安全性实践和优化AI响应质量的技巧。这种组合可显著减少从API规范到代码实现的时间,降低错误率并加速迭代过程,为开发者带来更高效的体验。
|
人工智能 测试技术 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模型,提升开发效率。
1052 13