CN1763717A - 一种利用脚本及其编译器调用宿主软件函数的系统与方法 - Google Patents

一种利用脚本及其编译器调用宿主软件函数的系统与方法 Download PDF

Info

Publication number
CN1763717A
CN1763717A CN 200510123923 CN200510123923A CN1763717A CN 1763717 A CN1763717 A CN 1763717A CN 200510123923 CN200510123923 CN 200510123923 CN 200510123923 A CN200510123923 A CN 200510123923A CN 1763717 A CN1763717 A CN 1763717A
Authority
CN
China
Prior art keywords
script
function
host software
mapping
compile device
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.)
Granted
Application number
CN 200510123923
Other languages
English (en)
Other versions
CN100389391C (zh
Inventor
夏华栋
游明琦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Vimicro Corp
Original Assignee
Vimicro Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Vimicro Corp filed Critical Vimicro Corp
Priority to CNB2005101239237A priority Critical patent/CN100389391C/zh
Publication of CN1763717A publication Critical patent/CN1763717A/zh
Application granted granted Critical
Publication of CN100389391C publication Critical patent/CN100389391C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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_func.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 (8)

1、一种利用脚本及其编译器调用宿主软件函数的系统,其特征在于,包括:
宿主软件单元,用于实现特定的应用功能,且包含有用以实现特定功能的宿主软件函数及对应的映射函数,并内嵌有脚本编译器;
脚本单元,为根据用户目标采用脚本语言编写的脚本源文件,用于实现用户预定的目标功能,所述脚本单元包含一存放有脚本函数的脚本头文件;
脚本编译器,用于解释执行脚本源文件中的脚本命令,其包含一个用以存放宿主软件函数与脚本函数的映射关系的全局变量,用以根据映射关系来调用宿主软件函数。
2、如权利要求1所述的系统,其特征在于,所述脚本编译器是同宿主软件单元整合在一起的。
3、如权利要求1所述的系统,其特征在于,所述脚本头文件中的脚本函数是可以根据用户需要进行增删的。
4、一种基于权利要求1所述系统利用脚本及其编译器调用宿主软件函数的方法,其特征在于,包括如下步骤:
建立宿主软件函数与脚本函数之间的映射关系;
根据用户目标,确定脚本单元中待编译的脚本源文件;
脚本编译器解释执行脚本源文件;
脚本编译器调用并执行宿主软件函数。
5、如权利要求4所述的方法,其特征在于,所述建立宿主软件函数与脚本函数之间的映射关系步骤包括:
确定建立宿主软件函数与脚本函数之间映射关系的映射结构;
根据映射结构,将所有被调用的宿主软件函数包装生成对应的映射函数;
根据映射结构,在脚本头文件中生成对应于所述映射函数的脚本函数;
脚本编译器将映射函数、脚本函数之间关系保存于一个全局变量中。
6、如权利要求5所述的方法,其特征在于,所述映射函数的参数数目为两个,所述宿主软件函数的参数数目是可变的。
7、如权利要求5所述的方法,其特征在于,所述脚本编译器对脚本源文件进行解释执行步骤包括:
脚本编译器解释脚本源文件并获取其中需调用的脚本函数;
脚本编译器通过所述全局变量获取该脚本函数的映射关系;
根据映射关系,脚本编译器获取与脚本函数对应的映射函数;
脚本编译器通过该映射函数获取调用宿主软件函数的途径。
8、如权利要求4所述的方法,其特征在于,所述脚本编译器调用并执行宿主软件函数步骤中,脚本编译器以文本形式调用所述宿主软件函数,实现宿主软件相应函数的功能。
CNB2005101239237A 2005-11-24 2005-11-24 一种利用脚本及其编译器调用宿主软件函数的系统与方法 Expired - Fee Related CN100389391C (zh)

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 true CN1763717A (zh) 2006-04-26
CN100389391C 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)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008058473A1 (fr) * 2006-11-17 2008-05-22 Shenzhen Lingce Technology Co., Ltd. Procédé de mappage dans le système de test de programme et système de test de programme
CN101799766A (zh) * 2010-03-26 2010-08-11 青岛海信电器股份有限公司 Widget引擎中使用第三方引擎解析脚本文件的方法和装置
CN102169432A (zh) * 2010-02-25 2011-08-31 腾讯科技(深圳)有限公司 一种as语言接口函数及调用方法
CN101458633B (zh) * 2007-12-13 2012-02-15 华为软件技术有限公司 通过脚本程序访问宿主程序的方法及其系统和装置
CN102377793A (zh) * 2010-08-11 2012-03-14 优视科技有限公司 基于移动通讯设备终端的Flash交互方法及装置
CN102750177A (zh) * 2012-06-19 2012-10-24 武汉凌控自动化技术有限公司 一种使用编译器的脚本实现方法
CN103488519A (zh) * 2013-09-27 2014-01-01 上海野火网络科技有限公司 一种交互式脚本语言解释器的实现方法
CN104252593A (zh) * 2013-06-27 2014-12-31 贝壳网际(北京)安全技术有限公司 脚本监控方法和装置
CN104423986A (zh) * 2013-09-02 2015-03-18 北京亿阳信通科技有限公司 一种应用系统内嵌脚本的方法和装置
CN105278445A (zh) * 2015-11-05 2016-01-27 广州擎天实业有限公司 同步发电机励磁调节器控制程序的二次开发方法
CN105446788A (zh) * 2014-08-20 2016-03-30 联想(北京)有限公司 一种信息处理方法及电子设备
CN105739981A (zh) * 2016-01-28 2016-07-06 厦门飞信网络科技有限公司 一种代码补全实现方法、装置和计算设备
CN110110299A (zh) * 2019-04-28 2019-08-09 腾讯科技(上海)有限公司 文本变换方法、装置以及服务器
CN110825383A (zh) * 2019-10-14 2020-02-21 北京奇艺世纪科技有限公司 一种视频交互方法、装置及计算机可读存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5404528A (en) * 1993-01-19 1995-04-04 Canon Information Systems, Inc. Scripting system
CN1310446C (zh) * 2002-08-20 2007-04-11 华为技术有限公司 镜像测试方法
CN1273897C (zh) * 2002-11-04 2006-09-06 华为技术有限公司 一种单元测试自动化方法
CN1516011A (zh) * 2003-01-07 2004-07-28 珠海金山软件股份有限公司 检测和清除计算机病毒的系统和方法

Cited By (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008058473A1 (fr) * 2006-11-17 2008-05-22 Shenzhen Lingce Technology Co., Ltd. Procédé de mappage dans le système de test de programme et système de test de programme
CN101458633B (zh) * 2007-12-13 2012-02-15 华为软件技术有限公司 通过脚本程序访问宿主程序的方法及其系统和装置
CN102169432B (zh) * 2010-02-25 2014-09-03 腾讯科技(深圳)有限公司 一种as语言接口函数及调用方法
CN102169432A (zh) * 2010-02-25 2011-08-31 腾讯科技(深圳)有限公司 一种as语言接口函数及调用方法
CN101799766B (zh) * 2010-03-26 2013-03-20 青岛海信电器股份有限公司 Widget引擎中使用第三方引擎解析脚本文件的方法和装置
CN101799766A (zh) * 2010-03-26 2010-08-11 青岛海信电器股份有限公司 Widget引擎中使用第三方引擎解析脚本文件的方法和装置
CN102377793A (zh) * 2010-08-11 2012-03-14 优视科技有限公司 基于移动通讯设备终端的Flash交互方法及装置
CN102750177A (zh) * 2012-06-19 2012-10-24 武汉凌控自动化技术有限公司 一种使用编译器的脚本实现方法
CN102750177B (zh) * 2012-06-19 2014-12-31 武汉凌控自动化技术有限公司 一种使用编译器的脚本实现方法
CN104252593A (zh) * 2013-06-27 2014-12-31 贝壳网际(北京)安全技术有限公司 脚本监控方法和装置
CN104423986A (zh) * 2013-09-02 2015-03-18 北京亿阳信通科技有限公司 一种应用系统内嵌脚本的方法和装置
CN104423986B (zh) * 2013-09-02 2018-12-14 山东亿阳信通信息技术有限公司 一种应用系统内嵌脚本的方法和装置
CN103488519B (zh) * 2013-09-27 2016-05-25 上海野火网络科技有限公司 一种交互式脚本语言解释器的实现方法
CN103488519A (zh) * 2013-09-27 2014-01-01 上海野火网络科技有限公司 一种交互式脚本语言解释器的实现方法
CN105446788B (zh) * 2014-08-20 2019-01-11 联想(北京)有限公司 一种信息处理方法及电子设备
CN105446788A (zh) * 2014-08-20 2016-03-30 联想(北京)有限公司 一种信息处理方法及电子设备
CN105278445B (zh) * 2015-11-05 2018-09-11 广州擎天实业有限公司 同步发电机励磁调节器控制程序的二次开发方法
CN105278445A (zh) * 2015-11-05 2016-01-27 广州擎天实业有限公司 同步发电机励磁调节器控制程序的二次开发方法
CN105739981A (zh) * 2016-01-28 2016-07-06 厦门飞信网络科技有限公司 一种代码补全实现方法、装置和计算设备
CN105739981B (zh) * 2016-01-28 2020-03-06 厦门飞信网络科技有限公司 一种代码补全实现方法、装置和计算设备
CN110110299A (zh) * 2019-04-28 2019-08-09 腾讯科技(上海)有限公司 文本变换方法、装置以及服务器
CN110110299B (zh) * 2019-04-28 2023-04-07 腾讯科技(上海)有限公司 文本变换方法、装置以及服务器
CN110825383A (zh) * 2019-10-14 2020-02-21 北京奇艺世纪科技有限公司 一种视频交互方法、装置及计算机可读存储介质
CN110825383B (zh) * 2019-10-14 2023-08-22 北京奇艺世纪科技有限公司 一种视频交互方法、装置及计算机可读存储介质

Also Published As

Publication number Publication date
CN100389391C (zh) 2008-05-21

Similar Documents

Publication Publication Date Title
CN1763717A (zh) 一种利用脚本及其编译器调用宿主软件函数的系统与方法
Jones et al. The Glasgow Haskell compiler: a technical overview
CN1148680C (zh) 显示分层结构的方法、系统以及一种计算机系统
CN106415495B (zh) 用于应用开发的编程系统和语言
CN1278231C (zh) 将抽象句法表示法1数据模型化成对象模型的方法及系统
CN1949186A (zh) 一种程序调测系统及用于程序调测系统的映射方法
CN1848774A (zh) 一种远程调用通信组件的系统及方法
CN105183476B (zh) 一种跨平台应用程序的构建方法和装置
CN1816043A (zh) 基于组件复用的脚本生成装置及其方法
CN1858717A (zh) 一种数据编解码方法及其编解码器
CN1313926C (zh) 模板编译方法
CN1916842A (zh) 构件化软件系统中实现反射机制的构件封装方法
CN1737755A (zh) 一种嵌入式实时操作系统的建模和代码生成方法
CN1296834C (zh) 编程对象简化的内存重新分配方法
CN1869926A (zh) 一种生成仿真设备面板的方法及系统
CN1255744C (zh) 智能卡通用高速发卡机及其发卡方法
CN1238834C (zh) 一种口语识别理解的识别分析方法
CN1264090C (zh) 调用构件对象功能的智能指针的封装方法
CN1855052A (zh) 一种从树型结构数据和一组代码片断结构体生成目标源代码的方法
CN1525317A (zh) 在标记中用于定义和使用子级说明的系统和方法
CN1945527A (zh) 可实现代码复用的server版代码生成系统
CN101034374A (zh) 在虚拟机中管理栈的设备和方法
CN1320456C (zh) 智能仪表界面自动生成方法
CN1845514A (zh) 软件模块的测试方法
CN101056312A (zh) 一种设备间通信的方法及系统

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