CN100389391C - 一种利用脚本及其编译器调用宿主软件函数的系统与方法 - Google Patents
一种利用脚本及其编译器调用宿主软件函数的系统与方法 Download PDFInfo
- Publication number
- CN100389391C CN100389391C CNB2005101239237A CN200510123923A CN100389391C CN 100389391 C CN100389391 C CN 100389391C CN B2005101239237 A CNB2005101239237 A CN B2005101239237A CN 200510123923 A CN200510123923 A CN 200510123923A CN 100389391 C CN100389391 C CN 100389391C
- Authority
- CN
- China
- Prior art keywords
- script
- function
- host software
- mapping
- parameters
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 17
- 230000006870 function Effects 0.000 title description 119
- 238000013459 approach Methods 0.000 claims abstract description 6
- 238000013507 mapping Methods 0.000 claims description 61
- 238000000151 deposition Methods 0.000 claims description 4
- 230000010354 integration Effects 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000007792 addition Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
Images
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种利用脚本及其编译器调用宿主软件函数的系统与方法,包括宿主软件单元、脚本单元及内嵌于宿主软件单元的脚本编译器,脚本编译器通过对脚本单元的脚本源文件进行解释执行,调用宿主软件单元内部的宿主软件函数,实现用户期望的函数功能调用。本发明在宿主软件原有的图形界面操作之外,增加了一种文本调用宿主软件函数的途径,解决了使用平台软件的灵活性差及各种功能整合不够理想的问题。
Description
技术领域
本发明涉及软件中的函数调用技术,尤其涉及一种利用脚本及其编译器调用宿主软件函数的系统与方法。
背景技术
大型软件因其功能强大、界面复杂,造成使用起来不免失于笨重,且和操作系统之间功能的整合也不方便。现有的软件在形成产品以后,其使用界面是固化在软件主体中的,操作形式单一;并且,各功能模块间的配合也由成型软件产品的现有结构完全决定,而不能随意拓展。
而脚本具有语法类似于某种高级语言的形式,其主要由一些命令语句、声明语句和函数调用语句组成,其语法灵活、自由,符合程序员的使用习惯。
如果能够使用脚本文件(Script)调用宿主软件内部的函数,脚本将在宿主软件原有的图形界面操作之外,增加一种文本调用的途径,将提高使用平台软件的灵活性。
发明内容
本发明所要解决的技术问题在于提供一种利用脚本及其编译器调用宿主软件函数的系统与方法,用于在宿主软件原有的图形界面操作之外,增加一种文本调用的途径,以解决使用平台软件的灵活性差及各功能整合不够理想的问题。
本发明提供一种利用脚本及其编译器调用宿主软件函数的系统,包括宿主软件单元以及相连的脚本单元,该宿主软件单元包含有宿主软件函数并内嵌有脚本编译器;该脚本单元包括根据用户目标利用脚本语言编写的脚本源文件以及存放有脚本函数的脚本头文件,其中:
所述宿主软件单元,还包括根据宿主软件函数与脚本函数之间的映射结构对宿主软件函数进行包装生成的对应的映射函数;
所述脚本单元,还包括根据映射结构在脚本头文件中生成的对应于所述映射函数的脚本函数;
所述脚本编译器,用于解释执行脚本源文件中的脚本命令,该脚本编译器包含一个用以存放宿主软件函数与脚本函数的映射关系的全局变量,所述脚本编译器通过所述全局变量获取脚本函数与对应映射函数的映射关系,并根据映射关系得到映射函数,通过调用映射函数来调用宿主软件函数。
所述映射结构中至少包括宿主软件函数和脚本函数两个参数。
所述映射结构中还包括用于表示函数最大的参数数目、用于表示函数最小的参数数目的参数,以及帮助信息参数。
所述映射函数的参数个数是固定的数目值。
所述宿主软件函数与所述脚本函数的参数数目是可变的。
本发明还提供一种基于所述系统利用脚本及其编译器调用宿主软件函数的方法,包括如下步骤:
首先,建立宿主软件函数与脚本函数之间的映射结构,根据所述映射结构,将所有被调用的宿主软件函数包装生成对应的映射函数,生成对应于所述映射函数的脚本函数,并将映射函数、脚本函数之间关系保存于一个全局变量中,建立宿主软件函数与脚本函数之间的映射关系;
根据用户目标,利用脚本语言及所述脚本函数确定脚本单元中待编译的脚本源文件;
脚本编译器解释执行脚本源文件;
脚本编译器根据脚本源文件中的脚本函数调用并执行与所述脚本函数建立有映射关系的宿主软件函数。
进一步地,所述脚本编译器对脚本源文件进行解释执行步骤包括:
脚本编译器解释脚本源文件并获取其中需调用的脚本函数;
脚本编译器通过所述全局变量获取该脚本函数与相应映射函数的映射关系;
根据映射关系,脚本编译器获取与脚本函数对应的映射函数;
脚本编译器通过该映射函数获取调用宿主软件函数的途径。
进一步地,所述映射结构中至少包括宿主软件函数和脚本函数两个参数。
进一步地,所述映射结构中还包括用于表示函数最大的参数数目、用于表示函数最小的参数数目的参数,以及帮助信息参数。
进一步地,所述映射函数的参数个数是固定的数目值;所述宿主软件函数与所述脚本函数的参数数目是可变的。
本发明提出了一种创新的软件结构,利用脚本及其编译器以文本形式调用执行宿主软件内部的一些功能模块的函数,一方面大大提高了使用平台软件的灵活性,在宿主软件原有的图形界面操作之外,增加了一种文本调用的途径。另一方面,这种创新的软件结构也高度促进了软件各功能之间的整合,比如可以利用脚本连续调用一系列宿主软件功能,形成可以演示的演示文件(Demo)。利用本发明的函数调用方法,通过其中的映射结构及映射函数,可以适应多种函数参数,提高了调用时的适用性。
附图说明
图1是根据本发明实施例的系统软件结构框图;
图2是根据本发明实施例的方法的流程图,其被用来说明利用脚本及其编译器调用宿主软件函数的方法。
具体实施方式
本发明提出了一种创新的软件结构,利用脚本及其编译器,以文本形式调用执行宿主软件内部的一些功能模块。
该结构有三个主体:宿主软件,脚本及脚本编译器。
如图1所示,在宿主软件之外,新增加了一个针对脚本的编译器,作为宿主软件的一个部分一起发行。脚本编译器通过对输入脚本文件的脚本命令的解释执行,调用宿主软件内部的函数,给出脚本编写者期望的结果。所述宿主软件包含有用以实现特定功能的函数。
本发明所述脚本是我们自定义的,其语法由类似某种高级语言的形式给出(比如,C语言),主要由一些命令语句、声明语句和对宿主软件内部函数的调用语句组成,语法宜灵活、自由,符合程序员的使用习惯。
此软件结构实现的关键在于脚本文件的语法结构。所述脚本语法主要由三部分组成:
1、变量声明语句和循环分支语句;
类似C的#define,#include等预编译语句,这些语法结构形成了脚本语法的基本框架,并且可随具体需要作适当增删。
2、宿主软件功能调用语句;
脚本文件就是通过这些语句来调用宿主软件的函数的。这些语句以函数调用的形式给出,函数原型都定义在一个特殊的头文件host_func.h中。所以每个脚本文件都应该包含一行命令:#include<host_func.h>。该头文件中,每个函数原型都对应着宿主软件软件内部的一个对等的函数组(一个或者多个函数的组合)。故我们也可以通过对该头文件的中脚本函数原型的增删来选择性地控制其内部功能的开放程度。
3、操作系统命令调用语句;
这部分的语句具有双刃性:它们可以大大增强脚本的功能,使得宿主软件可以很好的和操作系统整合在一起;另一方面,也增加了脚本源文件的平台依赖性。但这个缺点,可以通过小心的选择操作系统间共有的功能来设计脚本语法,以对其进行避免。
脚本编译器的功能是解释执行脚本文件。其不同于一般编译器的主要特点在于,它是同宿主软件整合在一起的,并可以映射脚本命令到宿主软件的函数组合,并直接调用宿主软件的函数。
如图2所示为利用脚本及其编译器调用宿主软件函数的方法流程图,主要包括如下步骤:
步骤201:建立宿主软件函数与脚本函数之间的映射关系。
脚本编译器的这种映射功能是通过如下的一个结构体实现的(此处以C语言描述):
typedef void cmdcall(int argc,char**argv);
typedef struct tag_TCmdUnit
{
char*cmdstr;
int minpara;
int maxpara;
char*helpstr;
CmdCall*pcall;
}TCmdUnit,*pTCmdUnit;
在这里,我们使用TcmdUnit结构来保存宿主软件的函数原型同脚本头文件host_func.h中脚本函数的对应关系。
其中:
“cmdstr”,用于保存host_fnuc.h中脚本命令的字串;
“CmdCall”用于表示被映射的宿主软件函数原型;
“maxpara”,用于表示函数最大的参数数目;
“minpara”,用于表示函数最小的参数数目;
“helpstr”,用于保存对该函数调用的一些帮助信息,如功能,使用限制,参数说明等。
cmdcall表示参数为(int argc,char**argv)的函数,故而宿主软件所有希望被脚本访问的函数都要包装成这种形式。
这里给出一个示例,假设宿主软件中有个函数为f(int,float,char*),且参数数目可变,则需要另外写一个函数F(int,char**),如下:
void F(int argc,char**argv)
{
If(argc>3)
{
Print error message;
Return;
}
If(argc=1)
f(str2int(argv[0]));
if(argc=2)
f(str2int(argv[0]),str2float(argv[1]));
if(argc=3)
f(str2int(argv[0]),str2float(argv[1]),argv[3]);
}
该函数的输入参数为argc和argv,argc表示该指针的大小,argv表示指向参数字符串的指针;
该函数运行流程如下:
(1)判断argc是否大于3,如果是,表示发生的输入参数错误,函数报错并返回;
(2)判断argc是否等于1,如果是,执行函数f,并将argv[0]转换为整型数据作为参数送给f;
(3)判断argc是否等于2,如果是,执行函数f,并将argv[0]转换为整型数据,argv[1]转换为浮点数据,作为参数送给f;
(4)判断argc是否等于3,如果是,执行函数f,并将argv[0]转换为整型数据,argv[1]转换为浮点数据,合同argv[2]一起作为参数送给f;
相应地,在脚本文件的host_func.h头文件中也有一个函数原型对应于F():Script_F(int,float,char*)。
在编译器中,用一个全局变量:
TcmdUnit gCmdList[NUMBER_OF_FUNC],来记录上面f(),F()和Script_F()之间的关系,如下:
gCmdList[i]={Script_F,1,3,“Script_F(int,float,char*)”,F}
其中:
Script_F,为脚本头文件函数;
1,为参数minipara的值,表示最小参数为1个;
3,为参数maxpara的值,表示最大参数为3个;
“Script_F(int,float,char*)”,为参数cmdstr的值,表示host_func.h中脚本命令的字串;
F,为参数CmdCall的值,表示对应的宿主软件函数f的映射函数F。
步骤202:根据用户目标,确定脚本单元中待编译的脚本源文件。
用户可以根据自己的目标,利用脚本语法编写相应的脚本源文件,编写脚本函数来调用宿主软件函数。
步骤203:脚本编译器解释执行脚本源文件;
脚本编译器对编写好的脚本源文件进行解释,并执行脚本文件。当脚本编译器读取到脚本文件中调用了host_func.h中的函数script_F后,就在gCmdList中匹配字串TcmdUnit.cmdstr,找到gCmdList[i]入口后,则调用F来解释执行Script_F这个脚本命令。
步骤204:脚本编译器调用并执行宿主软件函数。
由于函数F中包装有宿主软件函数f,这样就实现了对宿主软件函数的调用,用户可以获得宿主软件函数的相应功能。
Claims (10)
1.一种利用脚本及其编译器调用宿主软件函数的系统,包括宿主软件单元以及相连的脚本单元,该宿主软件单元包含有宿主软件函数并内嵌有脚本编译器;该脚本单元包括根据用户目标利用脚本语言编写的脚本源文件以及存放有脚本函数的脚本头文件,其特征在于:
所述宿主软件单元,还包括根据宿主软件函数与脚本函数之间的映射结构对宿主软件函数进行包装生成的对应的映射函数;
所述脚本单元,还包括根据映射结构在脚本头文件中生成的对应于所述映射函数的脚本函数;
所述脚本编译器,用于解释执行脚本源文件中的脚本命令,该脚本编译器包含一个用以存放宿主软件函数与脚本函数的映射关系的全局变量,所述脚本编译器通过所述全局变量获取脚本函数与对应映射函数的映射关系,并根据映射关系得到映射函数,通过调用映射函数来调用宿主软件函数。
2.如权利要求1所述的系统,其特征在于,所述映射结构中至少包括宿主软件函数和脚本函数两个参数。
3.如权利要求2所述的系统,其特征在于,所述映射结构中还包括用于表示函数最大的参数数目、用于表示函数最小的参数数目的参数,以及帮助信息参数。
4.如权利要求1所述的系统,其特征在于,所述映射函数的参数个数是固定的数目值。
5.如权利要求1所述的系统,其特征在于,所述宿主软件函数与所述脚本函数的参数数目是可变的。
6.一种基于权利要求1所述系统利用脚本及其编译器调用宿主软件函数的方法,其特征在于,包括如下步骤:
首先,建立宿主软件函数与脚本函数之间的映射结构,根据所述映射结构,将所有被调用的宿主软件函数包装生成对应的映射函数,生成对应于所述映射函数的脚本函数,并将映射函数、脚本函数之间关系保存于一个全局变量中,建立宿主软件函数与脚本函数之间的映射关系;
根据用户目标,利用脚本语言及所述脚本函数确定脚本单元中待编译的脚本源文件;
脚本编译器解释执行脚本源文件;
脚本编译器根据脚本源文件中的脚本函数调用并执行与所述脚本函数建立有映射关系的宿主软件函数。
7.如权利要求6所述的方法,其特征在于,所述脚本编译器对脚本源文件进行解释执行步骤包括:
脚本编译器解释脚本源文件并获取其中需调用的脚本函数;
脚本编译器通过所述全局变量获取该脚本函数与相应映射函数的映射关系;
根据映射关系,脚本编译器获取与脚本函数对应的映射函数;
脚本编译器通过该映射函数获取调用宿主软件函数的途径。
8.如权利要求6或7所述的方法,其特征在于,所述映射结构中至少包括宿主软件函数和脚本函数两个参数。
9.如权利要求8所述的方法,其特征在于,所述映射结构中还包括用于表示函数最大的参数数目、用于表示函数最小的参数数目的参数,以及帮助信息参数。
10.如权利要求6所述的方法,其特征在于,所述映射函数的参数个数是固定的数目值;所述宿主软件函数与所述脚本函数的参数数目是可变的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005101239237A CN100389391C (zh) | 2005-11-24 | 2005-11-24 | 一种利用脚本及其编译器调用宿主软件函数的系统与方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005101239237A CN100389391C (zh) | 2005-11-24 | 2005-11-24 | 一种利用脚本及其编译器调用宿主软件函数的系统与方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1763717A CN1763717A (zh) | 2006-04-26 |
CN100389391C true CN100389391C (zh) | 2008-05-21 |
Family
ID=36747864
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005101239237A Expired - Fee Related CN100389391C (zh) | 2005-11-24 | 2005-11-24 | 一种利用脚本及其编译器调用宿主软件函数的系统与方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100389391C (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1949186A (zh) * | 2006-11-17 | 2007-04-18 | 深圳市领测科技有限公司 | 一种程序调测系统及用于程序调测系统的映射方法 |
CN101458633B (zh) * | 2007-12-13 | 2012-02-15 | 华为软件技术有限公司 | 通过脚本程序访问宿主程序的方法及其系统和装置 |
CN102169432B (zh) * | 2010-02-25 | 2014-09-03 | 腾讯科技(深圳)有限公司 | 一种as语言接口函数及调用方法 |
CN101799766B (zh) * | 2010-03-26 | 2013-03-20 | 青岛海信电器股份有限公司 | Widget引擎中使用第三方引擎解析脚本文件的方法和装置 |
CN102377793B (zh) * | 2010-08-11 | 2014-02-05 | 优视科技有限公司 | 基于移动通讯设备终端的Flash交互方法及装置 |
CN102750177B (zh) * | 2012-06-19 | 2014-12-31 | 武汉凌控自动化技术有限公司 | 一种使用编译器的脚本实现方法 |
CN104252593B (zh) * | 2013-06-27 | 2019-07-30 | 贝壳网际(北京)安全技术有限公司 | 脚本监控方法和装置 |
CN104423986B (zh) * | 2013-09-02 | 2018-12-14 | 山东亿阳信通信息技术有限公司 | 一种应用系统内嵌脚本的方法和装置 |
CN103488519B (zh) * | 2013-09-27 | 2016-05-25 | 上海野火网络科技有限公司 | 一种交互式脚本语言解释器的实现方法 |
CN105446788B (zh) * | 2014-08-20 | 2019-01-11 | 联想(北京)有限公司 | 一种信息处理方法及电子设备 |
CN105278445B (zh) * | 2015-11-05 | 2018-09-11 | 广州擎天实业有限公司 | 同步发电机励磁调节器控制程序的二次开发方法 |
CN105739981B (zh) * | 2016-01-28 | 2020-03-06 | 厦门飞信网络科技有限公司 | 一种代码补全实现方法、装置和计算设备 |
CN110110299B (zh) * | 2019-04-28 | 2023-04-07 | 腾讯科技(上海)有限公司 | 文本变换方法、装置以及服务器 |
CN110825383B (zh) * | 2019-10-14 | 2023-08-22 | 北京奇艺世纪科技有限公司 | 一种视频交互方法、装置及计算机可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5404528A (en) * | 1993-01-19 | 1995-04-04 | Canon Information Systems, Inc. | Scripting system |
CN1477800A (zh) * | 2002-08-20 | 2004-02-25 | 华为技术有限公司 | 镜像测试方法 |
CN1499374A (zh) * | 2002-11-04 | 2004-05-26 | 华为技术有限公司 | 一种单元测试自动化方法 |
CN1516011A (zh) * | 2003-01-07 | 2004-07-28 | 珠海金山软件股份有限公司 | 检测和清除计算机病毒的系统和方法 |
-
2005
- 2005-11-24 CN CNB2005101239237A patent/CN100389391C/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5404528A (en) * | 1993-01-19 | 1995-04-04 | Canon Information Systems, Inc. | Scripting system |
CN1477800A (zh) * | 2002-08-20 | 2004-02-25 | 华为技术有限公司 | 镜像测试方法 |
CN1499374A (zh) * | 2002-11-04 | 2004-05-26 | 华为技术有限公司 | 一种单元测试自动化方法 |
CN1516011A (zh) * | 2003-01-07 | 2004-07-28 | 珠海金山软件股份有限公司 | 检测和清除计算机病毒的系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1763717A (zh) | 2006-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100389391C (zh) | 一种利用脚本及其编译器调用宿主软件函数的系统与方法 | |
Jones et al. | The Glasgow Haskell compiler: a technical overview | |
CN101339500B (zh) | 基于xml模式的数据绑定应用程序接口生成方法 | |
Badros | JavaML: a markup language for Java source code | |
CN102177502B (zh) | 对中间码的逻辑扩展 | |
US20040261065A1 (en) | Method and system for compiling multiple languages | |
CN110688122B (zh) | 编译和执行智能合约的方法及装置 | |
CN101192141B (zh) | 一种将uoml封装成应用程序编程接口的方法 | |
ES2936090T3 (es) | Método implementado por computador que expone aplicaciones tipo software a partir de especificaciones de diseño | |
CN100561476C (zh) | 一种基于asn类型对象的代码生成方法 | |
CN102929682B (zh) | 自动扩展tcl语言的预处理方法和装置 | |
CN101699397A (zh) | 实现Java与XML数据绑定的方法 | |
CN102609255A (zh) | 一种Spring IOC配置文件的生成方法 | |
Pinto et al. | Aspect composition for multiple target languages using LARA | |
EP2564316A2 (en) | Resumable methods | |
Jones et al. | The AXIOM model framework: Transforming requirements to native code for cross-platform mobile applications | |
Nierstrasz et al. | A calculus for modeling software components | |
US20060242187A1 (en) | Type safe data proxy | |
US20070038666A1 (en) | Independent explicit interface implementation | |
Bunker et al. | Formal hardware specification languages for protocol compliance verification | |
CN112148283A (zh) | 一种跨平台的abi兼容c++组件框架的实现方法 | |
Rohl et al. | Flexible integration of XML into modeling and simulation systems | |
Blewitt | Hedgehog: automatic verification of design patterns in Java | |
JP2000347875A (ja) | ファイル移植技術 | |
Guduric et al. | A comparison between relational and operational QVT mappings |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080521 Termination date: 20121124 |