一种基于C语言预处理器实现的动态链接库反射方法及系统技术方案

技术编号:38160999 阅读:26 留言:0更新日期:2023-07-13 09:33
本发明专利技术公开了一种基于C语言预处理器实现的动态链接库反射方法,包括:S1:获取需要代理的动态链接库的文件名、需要代理的函数列表,所述函数列表包括:各函数的函数名、返回类型以及参数类型;S2:利用C语言的宏定义构建注册器,所述注册器的输入为动态链接库的文件名,需要代理的函数名,返回类型,参数类型;S3:通过编译器在编译期的预处理过程中利用所述注册器生成代理函数。S4:使用步骤S3所述注册器,在源代码中注册需要代理的函数;S5:在业务中调用S1中需要代理的函数,与步骤S4中的注册代码一起编译并运行软件。本发明专利技术解决了产品使用不同版本库模块,或同一产品不同版本使用使用该库模块时带来的兼容性问题。该库模块时带来的兼容性问题。该库模块时带来的兼容性问题。

【技术实现步骤摘要】
一种基于C语言预处理器实现的动态链接库反射方法及系统


[0001]本专利技术涉及动态链接库反射
,更具体地,涉及一种基于C语言预处理器实现的动态链接库反射方法及系统。

技术介绍

[0002]在计算机软件的开发过程中,使用C/C++等语言开发出的动态链接库的链接过程具有很多不可控性,因为不同的库模块可能使用不同的语法标准,不同版本的产品需要的库模块版本也不同,需要使用不同版本的编译器进行编译,在运行时需要不同版本的运行时,使得计算机软件在编译或者运行时都可能会出现不可预知的错误,尤其是在使用低版本编译器编译的软件链接高版本编译器编译的动态链接库时。
[0003]现有技术公开了一种用于编译java文件的编译方法及装置,方法包括以下:获取待编译的java文件包;解析所述java文件包,得到解析信息,所述解析信息为所述java文件包中各个基础单元组成信息;对所述java文件包进行等同格式转化,在所述等同格式转化中对所述解析信息加入自定义标识并排序,以得到改造信息;将所述改造信息通过对应编译器进行编译。该现有技术实现的是对java文件进行编本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种基于C语言预处理器实现的动态链接库反射方法,其特征在于,包括以下步骤:S1:获取需要代理的动态链接库的文件名、需要代理的函数列表,所述函数列表包括:各函数的函数名、返回类型以及参数类型;S2:利用C语言的宏定义构建注册器,所述注册器的输入为动态链接库的文件名,需要代理的函数名,返回类型,参数类型;S3:通过编译器在编译期的预处理过程中利用所述注册器生成代理函数。S4:使用步骤S3所述注册器,在源代码中注册需要代理的函数;S5:在业务中调用S1中需要代理的函数,与步骤S4中的注册代码一起编译并运行软件。2.根据权利要求1所述的一种基于C语言预处理器实现的动态链接库反射方法,其特征在于,步骤S3的具体过程为:S3.1:使用宏定义声明参数类型转发器,实现参数类型的转发;S3.2:使用宏定义声明参数转发器,实现参数的转发;S3.3:使用宏定义声明注册器,将返回值类型,函数名称,参数类型,动态链接库名称作为输入参数,实现代理函数的展开。3.根据权利要求2所述的一种基于C语言预处理器实现的动态链接库反射方法,其特征在于,使用宏定义声明参数类型转发器具体步骤为:S311:实现能够在多次宏展开中拼接参数的拼接函数,用于将还原后的所有参数类型和参数名称列表拼接到一起;S312:实现能够获取参数列表长度的宏函数,用于确定还原参数列表的递归深度;S313:为不同长度的参数列表声明还原参数类型和名称的宏定义,使用步骤S312的递归深度,递归展开参数列表,并使用步骤S311拼接函数在递归过程中拼接结果,生成预设格式的展开内容。4.根据权利要求3所述的一种基于C语言预处理器实现的动态链接库反射方法,其特征在于,步骤S313中所述的预设格式为Type1 arg1,Type2 arg2,Type3arg3,...TypeN argN,其中N表示正整数。5.根据权利要求3所述的一种基于C语言预处理器实现的动态链接库反射方法,其特征在于,使用宏定义声明参数转发器具体步骤为:为不同长度的参数列表声明还原参数名称的宏定义,使用步骤S312的递归深度,递归展开参数列表,并使用骤S311中的拼接函数在递归过程中拼接结果,生成第二预设格式的展开内容。6.根据权利要求5所述的一种基于C语言预处理器实现的动态链接库反射方法,其特征在于,所述第二预设格式为:arg1,arg2,arg3,...argM,其中M表示正整数。7.根据权利要求2所述的一种基于C语言预处理器实现的动态链接库反射方法,其特征在于...

【专利技术属性】
技术研发人员:刘帅帅郝志刚李伟
申请(专利权)人:广州南方卫星导航仪器有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1