当前位置: 首页 > 专利查询>山西大学专利>正文

一种不依赖开发环境的类库生成方法技术

技术编号:39745310 阅读:15 留言:0更新日期:2023-12-17 23:44
本发明专利技术公开了一种不依赖开发环境的类库生成方法,属于软件工程技术领域

【技术实现步骤摘要】
一种不依赖开发环境的类库生成方法


[0001]本专利技术属于软件工程
,具体涉及一种不依赖开发环境的类库生成方法


技术介绍

[0002]目前,在
Windows
平台,如果要导出一个
C++
类,一般通过
MFC
扩展
DLL(MFC Extension DLL)
实现


MFC
扩展
DLL
有一个限制,就是使用类库的开发环境必须和生产类库的开发环境相同

这个要求严重限制了类库的使用范围

[0003]所以,在
C++
开发方面,迫切需要一种方法,利用该方法可以生产出跨开发环境的类库
(Class Library)
,且该方法简单易用


技术实现思路

[0004]针对在
Windows
平台,没有被广泛接受的跨开发环境的
C++
的类库标准问题,本专利技术提供了一种不依赖开发环境的类库生成方法,利用该方法可以生产出跨开发环境的类库
(Class Library)
,该方法简单易用,同时不需要特殊的
(
类库
)
生产工具

[0005]为了达到上述目的,本专利技术采用了下列技术方案:
[0006]一种不依赖开发环境的类库生成方法,包括以下步骤:
[0007]步骤1:将欲导出类的成员函数修改为虚拟函数,生成
MFC
规则
DLL
或规则
DLL

[0008]所述步骤1的具体过程如下:
[0009]步骤
1.1
:如果导出类是派生自
MFC
的,则新建一个
MFC
规则
DLL
工程
(
共享
MFC)
;如果导出类不是基于
MFC
的,则新建一个规则
DLL
工程
(Regular DLL)
;下述以导出类是基于
MFC
的为例来介绍

[0010]步骤
1.2
:建立一个欲导出的类
CDigitalClock(class CDigitalClock:CStatic)

[0011]步骤
1.3
:将
CDigitalClock
中欲导出的函数修改为虚拟函数,被导出的虚拟函数必须保证不发生
override
,具体实施时,要保证该函数名称在该导出类

父类及其继承系列中的唯一性;
[0012]步骤
1.4
:在
CDigitalClock
的头文件
DigitalClock.H
中,调整导出函数的声明位置,使其排在其它成员函数
(
非导出函数
)
之前;
[0013]步骤
1.5
:析构函数也要
virtual
化,且要排在所有被导出函数之前;
[0014]步骤
1.6
:新建一个能创建
CDigitalClock
对象实例并返回其指针的全程函数:
CDigitalClock*CreateObj(void)
;新建一个能摧毁该对象实例的局部函数:
CDigitalClock
::
Release(void)

[0015]步骤
1.7
:用
def
文件导出上述
CreateObj
函数

[0016]至此,类
CDigitalClock
的导出完成,有用的文件有三个:
DLL
文件
、LIB
文件和头文件;该类库现在就可以使用,但使用时的开发环境必须和生产时是相同的,要想跨开发环境使用,必须对头文件做修改,下面介绍修改的步骤

[0017]步骤2:分析导出函数在
vtab
中的位置;
[0018]所述步骤2的具体过程如下:
[0019]步骤
2.1
:使用微软的
(
和生成类库时是同一个
)
开发工具新建一个
MFC EXE
工程;
[0020]步骤
2.2
:把类
CDigitalClock
加入其中;
[0021]步骤
2.3
:调用第一个导出函数;
[0022]步骤
2.4
:反汇编第一个导出函数的调用过程,分析其在
vtab
中的位置

附图1是调用该类时的源程序

[0023]从图2中看出,
Draw_Digit
函数在距
vtab
首地址偏移
0xC8H
字节处存储,
0xC8H
字节对应
vtab
中的第
0xC8H/4

50
个表项

在类的头文件图3中可以看出,我们分析的
Draw_Digit
是第三个函数,所以首函数
CreateTheCon

vtab
的第
50
‑2=
48
表项

[0024]如果使用
VS2015
,则首函数
CreateTheCon

vtab

93
表项

这就是导致类库在不同开发环境下不兼容的根本原因

[0025]由于子类虚函数在表中连续存储
(
除了析构函数,没有发生
override)
,所以整个导出类的虚函数在
vtab
中从第
48
个表项开始的地方

[0026]另外,作者开发了能自动计算导出类的虚函数在
vtab
表中位置的子程序

因此,无需反汇编源程序

[0027]步骤3:根据上述分析结果,在导出类的头文件插入相应数量的
pure virtual
函数,同时去掉基类的信息,具体过程如下:
[0028]步骤
3.1
:仅拷贝
DigitalClock.H
文件;
[0029]步骤
3.2
:在类声明中
class CDigitalClock:public CStatic本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种不依赖开发环境的类库生成方法,其特征在于:包括以下步骤:步骤1:将欲导出的成员函数修改为虚拟函数,生成
MFC
规则
DLL
或规则
DLL
;步骤2:分析导出函数在
vtab
中的位置;步骤3:在导出类的头文件插入相应数量的
pure virtual
函数,同时去掉基类的信息
。2.
根据权利要求1所述的一种不依赖开发环境的类库生成方法,其特征在于:所述步骤1的具体过程如下:步骤
1.1
:新建一个
MFC
规则
DLL
工程;或新建一个规则
DLL
工程;步骤
1.2
:建立一个欲导出的类例如:
CDigitalClock
,被导出的虚拟函数必须保证不和基类的函数发生
override
;步骤
1.3
:将
CDigitalClock
中欲导出的函数修改为虚拟函数;步骤
1.4
:在
CDigitalClock
的头文件
DigitalClock.H
中,调整导出函数的声明位置,使其排在其它成员函数之前;步骤
1.5
:析构函数要
virtual
化,且要排在所有被导出函数之前;步骤
1.6
:新建一个能创建
CDigitalClock
对象实例并返回其指针的全程函数:
CDigitalClock*CreateObj
;新建一个能摧毁该对象实例的局部函数:
CDigitalClock
::
Release
;步骤
1.7<...

【专利技术属性】
技术研发人员:邸秀文
申请(专利权)人:山西大学
类型:发明
国别省市:

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

1