[代码生成器] 二. 动态加载DLL的代码自动生成

本文介绍了一种自动生成工具,旨在简化动态加载DLL的过程,包括类名生成、H配置文件解析、生成.h和.cpp文件,以及调用优化。通过该工具,可以更高效地管理和调用多个DLL中的函数。
部署运行你感兴趣的模型镜像

动态加载dll场景1:
      有两组DLL(lib, h, dll 三个文件), 功能不同, 但名字却相同.(当然, 把这3个文件的名称改了, 用静态加载可能也可以, 没试过).

动态加载dll场景2:
      没有lib文件.

动态加载dll场景3:
      有a.dll, b.dll, 但可能在时间1你需要使用a.dll, 在时间2你需要使用b.dll. 所以程序不需要一运行就同时加载两个dll,
而采取动态加载的方式.

动态加载dll 需要LoadLibrary, 声明函数变量等, 如果动态加载的dll有上千个函数, 或者有几十个dll需要动态加载, 那工作量也是比较大的.
因此写了一个代码自动生成工具.

 

1. 类名: 输入一个字符 产生一个类名,
   例如输入DLL1, 则产生类名 CDLL1Loader, 将自动生成这个类, 类中包含LoadLibrary部分和FreeLibrary部分. 分别用于调用LoadLibrary和GetProcAddress来动态调用dll

2. H配置文件格式就是函数的声明, 一行一个函数例如
    文件 text.ini有两行这样的数据
    int Fun1(int nP1);
    void Fun2(double dP1);

分析出所有行(需要的函数)的返回值, 函数名, 参数. 自动生成加载代码(我的资源中有)

3. 生成h和cpp文件

.h中
// 函数类型
typedef int (__stdcall *Fun1_)(int nP1);
typedef void (__stdcall *Fun2_)(double dP1);

// 函数变量(CDLL1Loader的成员)
Fun1_ Fun1;
Fun2_ Fun2;

.cpp中
// 动态加载代码

m_hDll = ::LoadLibraryA("DLLPathName");
if(m_hDll == 0)
{
 return;
}
Fun1 = (Fun1_)::GetProcAddress(m_hDll, "Fun1");
Fun2 = (Fun2_)::GetProcAddress(m_hDll, "Fun2");

// 详细看下面文件

4. 调用
CDLL1Loader dllLoader;

dllLoader.LoadLibrary("DLLPathName");
...
dllLoader.Fun1(1);
dllLoader.Fun2(1.5);

// 这样子调用有点麻烦, 总是带上dllLoader, 再优化一下
定义如下宏
#ifdef DYN_LOAD_DLL
#define Fun1 dllLoader.Fun1
#define Fun2 dllLoader.Fun2
#else
#define Fun1 Fun1
#define Fun2 Fun2
#endif

// 这样就可以不带上dllLoader了. 而且如果需要转入静态加载, 也很方便.

 

 这是生成的类文件和text.ini文件

http://download.youkuaiyun.com/detail/cay22/4916306

 

这个工具的代码主要就是写文件功能了, 关键是你写入文件的内容, 内容就要看你的设计需求了.

因为代码涉及到工作内容, 所以...

您可能感兴趣的与本文相关的镜像

Seed-Coder-8B-Base

Seed-Coder-8B-Base

文本生成
Seed-Coder

Seed-Coder是一个功能强大、透明、参数高效的 8B 级开源代码模型系列,包括基础变体、指导变体和推理变体,由字节团队开源

  动软代码生成器是一款为程序员精心设计的代码自动生成器。该软件综合了开发中的经典思想和设计模式,支持生成不同架构的项目和代码,完全省去了大量的机械录入的时间和重复动作,让你更加有时间集中在业务逻辑的开发。    动软代码自动生成器 功能特点:   自动生成代码   一键自动生成各种代码,可以节省大量的时间来做业务逻辑的代码,那些重复的代码就交给它去做吧,1分钟生成一个架构所有的基本代码。有了它开发项目的效率简直轻松多了。   自动生成三层架构的完整项目和代码:简单三层结构;基于工厂模式三层架构;自定义结构模版   自动生成ASP.NET页面和cs后台代码   自动生成父子表的(事务)的代码   可以自定义代码生成的页面模板,批量生成项目代码。   灵活的代码生成方式   可以自定义手工选择生成的字段。   可以自由设定命名空间和实体类名。   自动生成方法属性注释。   支持对表和视图的代码生成。   支持对多种类型数据库生成代码:如SQLServer2000/2008、Oracle、MySQL、OleDb等。   可以生成多种不同类型数据层代码,例如: 基于SQL字符串方式,基于Parameter方式和基于存储过程方式的数据层。   生成存储过程和数据SQL脚本   可根据选定的数据库和表(可多选),自动生成增、删、改、查等操作的存储过程脚本,和生成表的创建脚本及数据记录的SQL脚本,支持在当前生成和导出脚本文件功能。   自动生成数据库结构文档   可以根据选定的数据库和表(可批量生成),可以生成字段的详细信息,包括默认值,描述等信息。生成相应的表结构文档,免去手工写文档和操作的麻烦。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值