CN111399932A - 调用dll的方法、***、浏览器的处理方法和浏览器 - Google Patents
调用dll的方法、***、浏览器的处理方法和浏览器 Download PDFInfo
- Publication number
- CN111399932A CN111399932A CN201811641934.8A CN201811641934A CN111399932A CN 111399932 A CN111399932 A CN 111399932A CN 201811641934 A CN201811641934 A CN 201811641934A CN 111399932 A CN111399932 A CN 111399932A
- Authority
- CN
- China
- Prior art keywords
- calling
- browser
- function
- called
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 57
- 238000003672 processing method Methods 0.000 title claims abstract description 13
- 230000007246 mechanism Effects 0.000 claims description 17
- VYZAMTAEIAYCRO-UHFFFAOYSA-N Chromium Chemical group [Cr] VYZAMTAEIAYCRO-UHFFFAOYSA-N 0.000 claims description 8
- 238000006243 chemical reaction Methods 0.000 claims description 6
- 230000006870 function Effects 0.000 description 157
- 238000005516 engineering process Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 10
- 238000012545 processing Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 230000010354 integration Effects 0.000 description 5
- 238000004590 computer program Methods 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 241000238582 Artemia Species 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000008275 binding mechanism Effects 0.000 description 1
- 229910052804 chromium Inorganic materials 0.000 description 1
- 239000011651 chromium Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000008571 general function Effects 0.000 description 1
- 238000007429 general method Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种调用DLL的方法、***、浏览器的处理方法和浏览器,该调用DLL的方法包括:获取待调用的DLL的调用参数;基于定制浏览器的专用函数,根据所述调用参数调用所述待调用的DLL;其中,所述定制浏览器为包括所述专用函数的浏览器,所述专用函数用于调用所述定制浏览器外部的DLL。本发明提高了浏览器集成浏览器外部设备相应功能的能力,提高了浏览器的通用性。
Description
技术领域
本发明涉及计算机前端应用技术领域,具体涉及一种调用DLL的方法、***、浏览器的处理方法和浏览器。
背景技术
DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件。当执行某一个程序时,相应的DLL文件就会被调用。DLL文件中存放的是各类程序的函数(子过程)实现过程,当程序需要调用函数时需要先载入DLL,然后取得函数的地址,最后进行调用。
相关技术中,在调用DLL时,DLL通常是内嵌在浏览器内部的,比如,现有的浏览器也能进行打印,但是打印功能是封装在浏览器内的。然而,在实际的应用中,当浏览器需要应用其他外部设备的某个功能时,则需要重新开发浏览器,将对应的外部设备的功能封装在浏览器内部,比如,外部设备是读卡器,则需要将读卡器的功能封装在浏览器中。这样以来,在不同的应用场合中,浏览器不具备通用性,且浏览器集成外部设备的能力较低。
发明内容
有鉴于此,提供一种调用DLL的方法、***、浏览器的处理方法和浏览器,以解决相关技术中浏览器内部只集成了特定的功能,而导致在其他场景下需要集成其他功能时需重新开发浏览器带来的操作繁琐的问题。
本发明采用如下技术方案:
第一方面,本发明实施例提供了一种调用DLL的方法,该调用DLL的方法包括:
获取待调用的DLL的调用参数;
基于定制浏览器的专用函数,根据所述调用参数调用所述待调用的DLL;
其中,所述定制浏览器为包括所述专用函数的浏览器,所述专用函数用于调用所述定制浏览器外部的DLL。
进一步的,所述获取待调用的DLL的调用参数,包括:
基于JS框架的扩展机制,接收开发者在JS框架中输入的调用参数。
进一步的,所述调用参数包括:DLL文件名称,以及,DLL文件中的函数名称。
进一步的,还包括:
基于浏览器的脚本引擎的扩展机制,在开源浏览器的扩展部分嵌入所述专用函数。
进一步的,所述脚本引擎为V8引擎,所述开源浏览器为Chromium。
进一步的,所述基于定制浏览器的专用函数,根据所述调用参数调用所述待调用的DLL,包括:
基于所述专用函数,执行如下内容:
将所述调用参数由脚本引擎规定的数据类型转换为DLL规定的数据类型;采用内嵌汇编方式,将数据类型转换后的调用参数写入函数调用栈;
采用内嵌汇编方式,从函数调用栈中读取调用参数,并根据所述调用参数调用DLL;
采用内嵌汇编方式获取函数的返回值,所述返回值用于表明调用成功或者失败;
在调用成功后,获取DLL调用后的参数,并转化为脚本引擎规定的数据类型后,返回给所述定制浏览器的使用者。
进一步的,所述DLL为一个或多个,每个DLL用于记录一个外部设备的驱动函数。
第二方面,本发明实施例提供了一种调用DLL的***,该调用DLL的***包括:
前端框架,用于获取待调用的DLL的调用参数;
定制浏览器,用于基于预置的专用函数,根据所述调用参数调用所述待调用的DLL;
其中,所述定制浏览器为包括所述专用函数的浏览器,所述专用函数用于调用所述定制浏览器外部的DLL。
第三方面,本发明实施例提供了一种浏览器的处理方法,该浏览器的处理方法包括:
接收前端框架发送的待调用的DLL的调用参数;
基于预置的专用函数,根据所述调用参数调用所述待调用的DLL;
其中,所述专用函数用于调用所述浏览器外部的DLL。
第四方面,本发明实施例提供了一种浏览器,该浏览器包括:
接收模块,用于接收前端框架发送的待调用的DLL的调用参数;
调用模块,用于基于预设的专用函数,根据所述调用参数调用所述待调用的DLL;
其中,所述专用函数用于调用所述浏览器外部的DLL。
本发明采用以上技术方案,通过获取待调用的DLL的调用参数来确定浏览器需要实现的具体功能;专用函数可以调用定制浏览器外部的DLL,也即,可以通过浏览器外部的不同DLL的调用集成与DLL对应的功能,也即,集成相应的外部设备的功能;基于定制浏览器的专用函数,结合调用参数确定待调用的DLL,使浏览器在不同的应用场景中,可以通过DLL的调用实现对不同功能的集成,无需在浏览器内部封装浏览器外部的设备的不同功能,通过调用参数调用待调用的DLL,即可实现浏览器集成外部设备,解决了相关技术中浏览器只能集成特定功能的缺陷,以此提高了浏览器集成浏览器外部设备相应功能的能力,提高了浏览器的通用性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种调用DLL的方法的流程图;
图2是本发明实施例提供的另一种调用DLL的方法的流程图;
图3是本发明实施例中适用的一种外部设备的DLL的调用过程的示意图;
图4是本发明实施例提供的一种调用DLL的***的结构示意图;
图5是本发明实施例提供的一种浏览器的处理方法的流程图;
图6是本发明实施例提供的一种浏览器的示意图;
图7是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行详细的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本发明所保护的范围。
首先对本发明实施例可应用的场景进行介绍,目前各类企业、事业单位由于行业应用需要,都要在前端应用***中使用外部设备,外部设备可以包括传统的打印机,还有新兴的比如金融***中广泛应用的密码键盘、柜外清、多合一读卡器以及指纹登录设备等。
设备驱动一般指的是设备的驱动程序,是一种可以使计算机和设备通信的特殊程序,相当于硬件的接口,计算机操作***只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。
每种设备都有不同的厂家提供不同的驱动以及不同的驱动调用方式,使用本发明实施例提供的DLL的调用方法,在将需要将不同设备的功能集成在前端应用时,无需专门在针对每个设备特有的功能去开发浏览器。
实施例一
图1为本发明实施例一提供的一种调用DLL的方法的流程图,该方法可以由本发明实施例提供的调用DLL的***来执行,该***可采用软件和/或硬件的方式实现。参考图1,该方法具体可以包括如下步骤:
S101、获取待调用的DLL的调用参数。
比如,S101由JS框架执行。
其中,JS全称为JavaScript,是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型,它的解释器被称为JavaScript引擎,是浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
JS框架则是将常用的方法进行封装,方便调取和使用,一个框架是一个可复用的设计构件,它规定了应用的体系结构,JS框架则是对JS各种功能的封装和抽象,使得在使用时具有简便性和更好的兼容性,并且可以扩展框架中的内容。JS框架通常可以包括ExtJS、EasyUI、Angular.JS、React.JS以及Vue.JS,上述JS框架从界面展现和数据处理等方面提供了丰富的组件和强大的数据处理能力。
DLL(Dynamic Link Library,动态链接库)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件。当执行某一个程序时,相应的DLL文件就会被调用。DLL文件中存放的是各类程序的函数(子过程)实现过程,当程序需要调用函数时需要先载入DLL,然后取得函数的地址,最后进行调用。
具体的,应用前端JS框架获取待调用的DLL的调用参数,其中,调用参数包括DLL文件名称,以及,DLL文件中的函数名称,通过DLL文件名称,可以查找到与DLL名称对应的DLL文件,然后获取该DLL文件中的函数名称,再根据函数名称去查找对应的函数。此外,调用参数还可以包括DLL文件中的函数类型,以及,每个函数中的参数名称以及参数类型。在一个具体的例子中,待调用的DLL可以是浏览器外部的DLL,例如,不同的外部设备的DLL,其中,外部设备可以是应用在不同领域的外部设备,例如,金融领域的密码器和柜外清,以及,铁路部门读取身份证信息以及车票信息的身份核验设备等。每个外部设备有自己的DLL,在将浏览器集成不同外部设备之前,需要将该外部设备的DLL的名称以及DLL文件中的函数名称进行存储。其中,DLL文件中的不同函数对应更细化的不同的功能,例如,调用函数1,实现功能输入密码功能,调用函数2,实现查询余额功能。
S102、基于定制浏览器的专用函数,根据所述调用参数调用所述待调用的DLL;其中,所述定制浏览器为包括所述专用函数的浏览器,所述专用函数用于调用所述定制浏览器外部的DLL。
比如,S102由定制浏览器执行。
其中,专用函数是指,专门用于调用浏览器外部的DLL的函数。相应的,包含该专用函数的浏览器可以称为定制浏览器,以区别于不包含该专用函数的普通浏览器。
本发明实施例中的浏览器是指包括专用函数的定制浏览器,定制浏览器包括专用函数,也即,定制浏览器具有专用函数的功能。具体的,基于定制浏览器的专用函数,根据调用参数,包括DLL的文件名以及DLL文件中的函数名称,调用待调用的DLL。在实际的应用过程中,若JS框架只获取到DLL文件名,则可以根据DLL的文件名调用待调用的DLL;若JS框架只获取到DLL文件中的函数名称,则根据该函数名称确定其所属的DLL文件名,再实现根据DLL的文件名调用待调用的DLL。
本发明采用以上技术方案,通过获取待调用的DLL的调用参数来确定浏览器需要实现的具体功能;专用函数可以调用定制浏览器外部的DLL,也即,可以通过浏览器外部的不同DLL的调用集成与DLL对应的功能,也即,集成相应的外部设备的功能;基于定制浏览器的专用函数,结合调用参数确定待调用的DLL,使浏览器在不同的应用场景中,可以通过DLL的调用实现对不同功能的集成,无需在浏览器内部封装浏览器外部的设备的不同功能,通过调用参数调用待调用的DLL,即可实现浏览器集成外部设备,解决了相关技术中浏览器只能集成特定功能的缺陷,以此提高了浏览器集成浏览器外部设备相应功能的能力,提高了浏览器的通用性。
在上述技术方案的基础上,本发明实施例的调用DLL的方法还包括:基于浏览器的脚本引擎的扩展机制,在开源浏览器的扩展部分嵌入所述专用函数。
其中,开源指的是软件的源代码是公开的,开源浏览器即指源代码公开的浏览器,也即,浏览器的源码可以被公众使用,且使用、修改和发行过程不受许可证的限制。
脚本引擎,是指一个计算机编程语言的解释器,如用于建网站的ASP、PHP等,它的功能是解释执行用户的程序文本,将它译成计算机能执行的机器代码,实现一系列的功能。JS引擎的主要功能是解析和执行JS代码,通常情况下,在不能满足使用者多样化的需求时,则可以增加扩展以提升它的能力。
通常情况下,一般的开源浏览器不包括专用函数,则无法实现对浏览器外部DLL的调用,则需要在开源浏览器的扩展部分嵌入专用函数,嵌入原则通常是基于浏览器的脚本引擎的扩展机制,脚本引擎不同,则对应的扩展机制不同。
示例性的,上述脚本引擎为V8引擎,所述开源浏览器为Chromium。
其中,V8引擎即为开源JavaScript引擎,V8使用C++开发,并在谷歌浏览器中使用,在运行JavaScript之前,相比其它的JavaScript的引擎转换成字节码或解释执行,V8将其编译成原生机器码,并且使用了如内联缓存等方法来提高性能,提高了程序的运行速度。
当上述脚本引擎为V8引擎时,扩展机制包括绑定和扩展,其中,绑定机制是指,使用IDL(Interface Description Language,接口描述语言)文件或者接口文件生成绑定文件,将这些文件同V8引擎一起编译;通过V8的基类Extension进行能力扩展,无需和V8引擎一起编译,可以动态为引擎增加功能特性,具有很大的灵活性。在一个具体的例子中,V8引擎扩展部分使用的是它提供的动态扩展机制,基于Extension基类构建一个子类,在构造函数将通用函数(JS函数)与C++函数进行绑定,并实现GetNativeFunction虚函数,可根据函数的name参数返回专用函数,实现DLL的调用。因此,本发明实施例中的V8引擎的扩展机制可以是扩展。
本发明实施例中的开源浏览器为Chromium,Chromium是由Google主导开发的网页浏览器,以BSD许可证等多重自由版权发行并开放源代码,Chromium是Google的Chrome浏览器背后的引擎,其目的是为了创建一个安全、稳定和快速的通用浏览器。
需要说明的是,上述DLL为一个或多个,一些实施例中,比如,要集成浏览器的外部设备,则每个DLL用于记录一个外部设备的驱动函数。具体的,对DLL的个数不限定,DLL可以是一个,也可以是多个,其中,每个DLL用于记录一个外部设备的驱动函数,通过调用DLL,实现对对应的外部设备驱动函数的调用,而DLL文件中,不同的函数对应该外部设备的不同功能,因此,可以实现在浏览器中集成外部设备中与DLL文件中的函数对应的功能。
此外,本发明实施例中的技术方案,可以满足基于HTML5构建前端应用界面时的浏览器兼容性问题,其中,浏览器兼容问题产生的原因大致如下:浏览器厂商在推出产品是并未遵循统一标准,真实企业的网络信息技术环境也参差不齐,为面向不同的用户,需要在产品设计和实现中对浏览器的兼容性做充分考虑和多样性处理,并增加产品测试的工作量,本发明实施例中,应用定制的开源浏览器Chromium,可以通过修改源码的形式解决浏览器的兼容性问题。
实施例二
图2为本发明实施例二提供的另一种DLL调用的方法的流程图,本实施例在上述实施例的基础上实现。参考图2,该方法具体可以包括如下步骤:
S201、JS框架,基于JS框架的扩展机制,接收开发者在JS框架中输入的调用参数。
比如,参见图3,开发者在JS框架中通过JS脚本编写调用参数。
其中,框架的扩展机制通常是可供开发人员对其中的某一块的功能,根据当前的应用场景进行有效扩展,以实现在特定的应用场景中特定功能的应用,通常的扩展机制中提供多个扩展点,通过不同的扩展点,实现不同的扩展功能。
JS框架的扩展机制,是结合JavaScript特点的一种扩展机制,也包括不同的扩展点,本发明实施例中,按照JS扩展机制的扩展原则,接收开发者在JS框架中输入的调用参数。
在实际的应用过程中,开发者根据当前场景的需求,在JS框架中输入对应的调用参数,当前场景以银行服务***为例,当前场景的需求是,在银行人工办公窗口的电脑上的浏览器需要实现连接放置在窗口外部的柜外清设备,并与柜外清正常交互,以完成银行柜台的业务,其中,柜外清是整合了密码键盘评价器、对讲机等银行柜外的产品于一体的设备。在这种场景中,开发者在JS框架中输入的调用参数信息是指柜外清的DLL文件名以及DLL文件中的函数名称。需要说明的是,开发者在JS框架中输入的调用参数不局限于一种应用场景下的外部设备的调用参数。
在实际的应用过程中,前端提供封装的JS框架脚本的目的是前端开发者使用JS脚本方便的使用外部设备,前端JS框架的扩展内容主要包括:
首先提供设备驱动的注册才能实现设备的DLL的调用,具体的,驱动设备的注册是指,将需要集成的外部设备的各类信息进行注册,各类信息包括调用参数等;其次,提供通用的JS函数调用接口,项目或产品中按照JS函数要求调用参数,其中,调用参数主要包括DLL文件类型、DLL文件名、DLL文件中的函数名称、DLL文件中的函数参数以及每个函数中的参数名称以及参数类型等。此外,还可以包括DLL的调用约定,其中,DLL的调用约定和对应的设备的厂家有关,若设备属于同一个厂家,则遵循同一套调用约定;若设备不属于同一个厂家,则遵循不同的调用约定。在实际的应用过程中,DLL调用约定也可以存储在调用参数中。调用结束后,按JS对象组织返回数据,方便前端开发者使用。
S202、JS框架将调用参数发送给定制浏览器,定制浏览器将所述调用参数由脚本引擎规定的数据类型转换为DLL规定的数据类型。
其中,每种脚本引擎规定在当前脚本引擎下适用的数据类型,也即,当前脚本引擎以V8引擎为例,则这种情况下,脚本引擎规定的数据类型为V8引擎规定的数据类型。由于DLL文件是采用了C++语言的内嵌汇编技术编写的,在实际的专用函数执行DLL调用的过程中,DLL规定的数据类型通常是C++数据类型。
具体的,如上一实施例中所示,定制浏览器是指包含专用函数的浏览器,专用函数可以采用脚本引擎的扩展机制实现。比如,参见图3,以脚本引擎为V8引擎为例,则可以采用V8扩展机制(图3中用V8Extention表示)实现专用函数(图3中用专用JS原生函数表示)。专用函数用于调用浏览器外部的DLL。此外,参见图3,外部设备驱动可以包括读卡器驱动、密码键盘驱动和柜外清设备等。
一般来讲,脚本引擎和DLL采用不同的数据类型,因此,专用函数在调用DLL之前,可以先进行数据类型转换。比如,V8引擎接收到JS框架发送的调用参数后,将调用参数由V8引擎规定的数据类型转换为DLL规定的数据类型。
其中,调用参数包括DLL文件名称,以及,DLL文件中的函数名称。示例性的,将调用参数由V8引擎规定的数据类型转换为基本的C++数据类型,以通过数据类型的转换,实现DLL的调用。
S203、定制浏览器采用内嵌汇编方式,将数据类型转换后的调用参数写入函数调用栈。
比如,具体由定制浏览器中的专用函数采用内嵌汇编方式,将数据类型转换后的调用参数写入函数调用栈。
具体的,内嵌汇编是指在C语言或者C++语言中***汇编语言,内嵌汇编方式具有很强的灵活操作性,可以使其输出通过C或C++变量显示出来,这种能力使得该方式可以用作汇编指令和包含它的C程序或C++程序的接口。
栈,又名堆栈,是一种运算受限的线性表,仅允许在表的一端进行***和删除操作,这一端被称为栈顶,另一端称为栈底,向一个栈***新元素称为进栈、入栈或压栈,是把新元素放到栈顶元素上面,使之成为新的栈顶元素,从一个栈删除元素又称为出栈或退栈,是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
函数调用栈是指,栈中的元素是待调用的函数,本发明实施例中,按照DLL的调用约定,采用内嵌汇编方式,将转换为基本的C++数据类型的调用参数写入函数调用栈,以供在函数调用过程中对函数调用栈中的调用参数的应用。
S204、定制浏览器采用内嵌汇编方式,从函数调用栈中读取调用参数,并根据所述调用参数调用DLL。
比如,具体由定制浏览器中的专用函数采用内嵌汇编方式,从函数调用栈中读取调用参数,并根据所述调用参数调用DLL。
具体的,通过入栈操作,函数调用栈中的调用参数在栈中等待被调用出栈,采用内嵌汇编方式,在函数调用栈中读取调用参数,根据调用参数调用DLL。在一个具体的例子中,函数调用栈中从栈顶到栈底存储的均为各个调用参数,根据当前的应用场景,选取对应的调用参数,例如当前的应用场景为应用铁路部门读取身份证信息以及车票信息的身份核验设备对旅客身份进行核验时,需要将身份核验设备和铁路***的电脑设备相连进行操作,在这个例子中,从函数调用栈中读取与该身份核验设备对应的调用参数,根据调用参数调用DLL,则该DLL即为身份核验设备的DLL。
S205、定制浏览器采用内嵌汇编方式获取函数的返回值,所述返回值用于表明调用成功或者失败。
比如,具体由定制浏览器中的专用函数采用内嵌汇编方式,从函数调用栈中读取调用参数,并根据所述调用参数调用DLL。
其中,在计算机编程领域,一个函数的函数名是该函数的代表,也是一个变量,由于函数名变量通常用来将函数的处理结果数据带回给调用函数,即递归调用,因此,通常将函数名变量称为返回值,没有返回值的函数,功能只是完成一个操作,而具有返回值的参数,返回值指示函数执行是否成功。
具体的,在函数的调用过程中,采用内嵌汇编方式获取函数的返回值,其中,通过分析函数的返回值,则可以确定调用成功或者失败,以指示开发人员根据调用成功或者调用失败的情况进行下一步操作。
S206、定制浏览器在调用成功后,获取DLL调用后的参数,并转化为脚本引擎规定的数据类型后,返回给所述定制浏览器的使用者。
比如,具体由定制浏览器的专用函数在调用成功后,获取DLL调用后的参数,并转化为脚本引擎规定的数据类型后,返回给所述定制浏览器的使用者。
具体的,在调用成功后,获取DLL调用后的参数,并进行整理,将DLL调用后的参数由当前的DLL规定的数据类型转化为脚本引擎规定的数据类型。可选的,可以是将基本的C++数据类型转换为V8引擎规定的数据类型,返回给定制浏览器的使用者。在一个具体的例子中,当前应用场景为银行柜台中的钱款交易,则该步骤中,DLL调用后的参数可以是,在查询账户余额时,返回的账号和金额,在这个场景中,定制浏览器的使用者为银行工作人员,则银行工作人员在看到金额时,再将金额的具体数目告知用户。
可以理解的是,对于本领域技术人员来讲,在确定专用函数需要完成上述各种功能的基础上,本领域技术人员可以获知如何进行专用函数的编写,以实现上述各种功能。
本发明实施例中,通过基于JS框架的扩展机制,接收开发者在JS框架中输入的调用参数,以将各个调用参数进行存储以供调用;为了实现调用,需要将所述调用参数由脚本引擎规定的数据类型转换为DLL规定的数据类型;采用内嵌汇编方式,将数据类型转换后的调用参数写入函数调用栈;从函数调用栈中读取调用参数,并根据所述调用参数调用DLL,内嵌汇编方式有很强的灵活操作性,通过入栈操作,预先将各个调用参数进行存储,再根据实际需求结合调用参数调用DLL;获取用于表明调用成功或者失败的返回值,以指示开发人员根据上述返回值进行下一步操作;在调用成功后,获取DLL调用后的参数,并转化为脚本引擎规定的数据类型后,返回给所述定制浏览器的使用者;进一步通过将调用后的参数返回给定制浏览器的使用者,进一步完善了DLL调用的附加功能。
此外,本发明实施例中,定制浏览器使用JS脚本方式调用外部DLL接口,具体通过提供的JS前端框架,配置和编写相关JS脚本,可方便调用DLL接口,以达到快速集成外部设备的模式;在Javascript的V8引擎的扩展中使用通用方法调用DLL;在扩展中具体负责与DLL接口的交互,管理DLL文件中具体函数的输入输出和DLL文件中具体函数的返回结果的判断,并转化为V8引擎的数据类型;前端提供JavaScript专用框架,也即前端框架,通过DLL文件名称和DLL文件中的函数名称,结合前端具体功能页面获取的待调用的DLL的调用参数,使用前端框架中通用函数调用DLL中的具体函数,并获取返回值。
作为本发明实施例中的另一种实现方式,也即,前端应用集成外部设备的另一种实现方式,企业和产品可根据项目经验、技术积累和技术架构选择富客户端技术,如.Net、Java(使用Jni技术)实现客户端集成外部设备的功能,或采用富客户端封装其他开源浏览器,如Webkit,集成外部设备的DLL通过富客户端的技术,界面展现仍使用JS、Html等前端技术。
为了使本发明的技术方案更容易理解以及突出本发明实施例中DLL调用方法的有益效果,接下来对相关技术中前端应用集成外部设备的实现手段进行说明。
相关技术中,通常是应用Chromium支持的NPAPI规范,基于NPAPI等技术集成外部设备,其中,NPAPI(Netscape Plugin Application Programming Interface,网景插件应用程序编程接口)是Netscape Navigator、Mozilla Suite、Mozilla SeaMonkey和MozillaFirefox等Gecko引擎浏览器与Apple Safari和Google Chrome等webkit引擎浏览器所使用的类似ActiveX的插件接口。该方式遵循NPAPI规范编写特定功能的插件,浏览器在使用包含特定功能的插件的页面时,浏览器会调用该插件,通过NPAPI规范定义的接口使浏览器接口同插件之间得以交互。
具体的,NPAPI提供了两类接口,一类由插件实现,被浏览器调用,相关应用需集成外部功能可在此封装相关硬件厂商提供的接口,具体为根据传统使用Windows下DLL的方法,即以加载时动态链接的方式或运行时动态链接方式将具体外部设备的调用封装在插件代码中;另一类接口由浏览器实现,***件调用,主要包括图形绘制、数据流处理、内存分配和释放等功能。
目前的基于NPAPI等技术集成外部设备的方式有如下缺点:开发成本较高,项目实施人员需掌握NPAPI等规范,再引用外部设备的接口,编写浏览器插件,最后还要与页面开发人员联调测试,才能完成一种外部设备的接入;质量的隐患,各编写人员根据NPAPI规范完成插件,质量和稳定性无法保证,使浏览器存在不稳定的隐患,对项目以及产品的质量带来影响;开发规范升级的影响,由于NPAPI规范的各种问题,Google浏览器逐渐放弃对NPAPI的支持,采用PPAPI规范,全称为Pepper Plugin Application Programming Interface,是在NPAPI的基础上发展起来的一种规范,因此,项目或产品也要随着新推出的规范进行调整。
与上述相关技术相比,本发明实施例中,通过修改Chromium的源码,实现了对浏览器之外的外部设备的DLL的调用,避免通过具体插件规范实现集成外部设备的功能,同时使项目人员可快速集成和调试外部设备,缩短项目的建设周期。JS脚本调用DLL接口的方法可以使前端开发人员独立快速集成外部设备,项目和产品中无需再通过编写复杂的插件方式以达到集成外部设备的能力。同时相对于Chromium的浏览器的定制只是使用了浏览器本身的扩展技术就可以达到此目标,浏览器的基础功能丝毫不受影响,也避免大量编写插件带来的测试工作量和***稳定性;
图4为本发明实施例提供的一种DLL调用的***的结构图,该***用于执行本发明实施例中的DLL的调用的方法。参考图4,该***包括前端框架401和定制浏览器402。
前端框架401,用于获取待调用的DLL的调用参数。
具体的,前端框架401可以是前端JS框架,通过前端JS框架获取待调用的DLL的调用参数。
定制浏览器402,用于基于预置的专用函数,根据所述调用参数调用所述待调用的DLL;
其中,所述定制浏览器为包括所述专用函数的浏览器,所述专用函数用于调用所述定制浏览器外部的DLL。
具体的,专用函数预置在定制浏览器402内部,而定制浏览器可以基于预置的专用函数,根据调用参数调用定制浏览器外部的DLL,其中,定制浏览器外部是相对于定制浏览器内部之分,定制浏览器外部通常可以是需要与浏览器建立通信连接的具有特定功能的外部设备,如密码器和柜外清设备。
本发明实施例提供的DLL调用的***可执行本发明任意实施例提供的DLL***的调用方法,具备执行方法相应的功能模块和有益效果。
图5为本发明实施例提供的一种浏览器的处理方法的流程图,该方法可以由本发明实施例提供的浏览器执行,该浏览器可采用软件和/或硬件的方式实现。参考图5,该方法具体可以包括如下步骤:
S501、接收前端框架发送的待调用的DLL的调用参数。
具体的,前端框架基于JS框架的扩展机制,接收开发者在JS框架中输入的调用参数,前端框架将上述调用参数发送给定制浏览器,定制浏览器接收前端框架发送的待调用的DLL的调用参数。
S502、基于预置的专用函数,根据所述调用参数调用所述待调用的DLL;其中,所述专用函数用于调用所述浏览器外部的DLL。
具体的,专用函数预置在定制浏览器内部,而定制浏览器可以基于预置的专用函数,根据调用参数调用定制浏览器外部的DLL,其中,定制浏览器外部是相对于定制浏览器内部之分,定制浏览器外部通常可以是需要与浏览器建立通信连接的具有特定功能的外部设备,如密码器和柜外清设备。
图6为本发明实施例提供的一种浏览器的结构示意图,该浏览器用于执行本发明实施例中的浏览器的处理方法。参考图6,该浏览器包括接收模块601,调用模块602。
接收模块601,用于接收前端框架发送的待调用的DLL的调用参数;
调用模块602,用于基于预设的专用函数,根据所述调用参数调用所述待调用的DLL。
其中,所述专用函数用于调用所述浏览器外部的DLL。
本发明实施例提供的浏览器可执行本发明任意实施例提供的浏览器的处理方法,具备执行方法相应的功能模块和有益效果。
本发明实施例还提供一种电子设备,请参阅图7,图7为一种电子设备的结构示意图,如图7所示,该电子设备包括:处理器710,以及与处理器710相连接的存储器720;存储器720用于存储计算机程序;处理器710用于调用并执行所述存储器中的所述计算机程序,以执行如下的浏览器的处理方法:
一种浏览器的处理方法,包括:
接收前端框架发送的待调用的DLL的调用参数;
基于预置的专用函数,根据所述调用参数调用所述待调用的DLL;
其中,所述专用函数用于调用所述浏览器外部的DLL。
本发明实施例还提供一种存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时,以实现如下的浏览器的处理方法中各个步骤:
一种浏览器的处理方法,包括:
接收前端框架发送的待调用的DLL的调用参数;
基于预置的专用函数,根据所述调用参数调用所述待调用的DLL;
其中,所述专用函数用于调用所述浏览器外部的DLL。
可以理解的是,上述各实施例中相同或相似部分可以相互参考,在一些实施例中未详细说明的内容可以参见其他实施例中相同或相似的内容。
需要说明的是,在本发明的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是指至少两个。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行***执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (10)
1.一种调用DLL的方法,其特征在于,包括:
获取待调用的DLL的调用参数;
基于定制浏览器的专用函数,根据所述调用参数调用所述待调用的DLL;
其中,所述定制浏览器为包括所述专用函数的浏览器,所述专用函数用于调用所述定制浏览器外部的DLL。
2.根据权利要求1所述的方法,其特征在于,所述获取待调用的DLL的调用参数,包括:
基于JS框架的扩展机制,接收开发者在JS框架中输入的调用参数。
3.根据权利要求1所述的方法,其特征在于,所述调用参数包括:DLL文件名称,以及,DLL文件中的函数名称。
4.根据权利要求1所述的方法,其特征在于,还包括:
基于浏览器的脚本引擎的扩展机制,在开源浏览器的扩展部分嵌入所述专用函数。
5.根据权利要求4所述的方法,其特征在于,所述脚本引擎为V8引擎,
所述开源浏览器为Chromium。
6.根据权利要求1所述的方法,其特征在于,所述基于定制浏览器的专用函数,根据所述调用参数调用所述待调用的DLL,包括:
基于所述专用函数,执行如下内容:
将所述调用参数由脚本引擎规定的数据类型转换为DLL规定的数据类型;采用内嵌汇编方式,将数据类型转换后的调用参数写入函数调用栈;
采用内嵌汇编方式,从函数调用栈中读取调用参数,并根据所述调用参数调用DLL;
采用内嵌汇编方式获取函数的返回值,所述返回值用于表明调用成功或者失败;
在调用成功后,获取DLL调用后的参数,并转化为脚本引擎规定的数据类型后,返回给所述定制浏览器的使用者。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述DLL为一个或多个,每个DLL用于记录一个外部设备的驱动函数。
8.一种调用DLL的***,其特征在于,包括:
前端框架,用于获取待调用的DLL的调用参数;
定制浏览器,用于基于预置的专用函数,根据所述调用参数调用所述待调用的DLL;
其中,所述定制浏览器为包括所述专用函数的浏览器,所述专用函数用于调用所述定制浏览器外部的DLL。
9.一种浏览器的处理方法,其特征在于,包括:
接收前端框架发送的待调用的DLL的调用参数;
基于预置的专用函数,根据所述调用参数调用所述待调用的DLL;
其中,所述专用函数用于调用所述浏览器外部的DLL。
10.一种浏览器,其特征在于,包括:
接收模块,用于接收前端框架发送的待调用的DLL的调用参数;
调用模块,用于基于预设的专用函数,根据所述调用参数调用所述待调用的DLL;
其中,所述专用函数用于调用所述浏览器外部的DLL。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811641934.8A CN111399932A (zh) | 2018-12-29 | 2018-12-29 | 调用dll的方法、***、浏览器的处理方法和浏览器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811641934.8A CN111399932A (zh) | 2018-12-29 | 2018-12-29 | 调用dll的方法、***、浏览器的处理方法和浏览器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111399932A true CN111399932A (zh) | 2020-07-10 |
Family
ID=71432052
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811641934.8A Pending CN111399932A (zh) | 2018-12-29 | 2018-12-29 | 调用dll的方法、***、浏览器的处理方法和浏览器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111399932A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113110890A (zh) * | 2021-04-20 | 2021-07-13 | 上海华东汽车信息技术有限公司 | 动态链接库调用方法、装置、计算机设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102999337A (zh) * | 2012-11-20 | 2013-03-27 | 上海中信信息发展股份有限公司 | 浏览器封装***及方法 |
CN104679489A (zh) * | 2013-12-02 | 2015-06-03 | 厦门极致互动网络技术有限公司 | 一种在网络游戏客户端中内置网络浏览器的***及方法 |
CN106445620A (zh) * | 2016-10-20 | 2017-02-22 | 南京莱斯信息技术股份有限公司 | 一种支持浏览器的客户端功能扩展组件的实现方法 |
-
2018
- 2018-12-29 CN CN201811641934.8A patent/CN111399932A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102999337A (zh) * | 2012-11-20 | 2013-03-27 | 上海中信信息发展股份有限公司 | 浏览器封装***及方法 |
CN104679489A (zh) * | 2013-12-02 | 2015-06-03 | 厦门极致互动网络技术有限公司 | 一种在网络游戏客户端中内置网络浏览器的***及方法 |
CN106445620A (zh) * | 2016-10-20 | 2017-02-22 | 南京莱斯信息技术股份有限公司 | 一种支持浏览器的客户端功能扩展组件的实现方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113110890A (zh) * | 2021-04-20 | 2021-07-13 | 上海华东汽车信息技术有限公司 | 动态链接库调用方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110096338B (zh) | 智能合约执行方法、装置、设备及介质 | |
US9785456B2 (en) | Metadata-driven dynamic specialization | |
CN108228188B (zh) | 一种视图组件处理方法、电子设备及可读存储介质 | |
US9811360B2 (en) | Dynamic determination of application server runtime classloading | |
US9678726B1 (en) | Automatic generation of plugins for development tools | |
EP3123316B1 (en) | Supporting dynamic behavior in statically compiled programs | |
US20150324173A1 (en) | Dynamically building locale objects or subsections of locale objects based on historical data | |
US9836290B2 (en) | Supporting dynamic behavior in statically compiled programs | |
CN111240684B (zh) | 一种js代码的裁剪方法、装置、介质和电子设备 | |
CN110580147A (zh) | 一种应用程序的开发方法和装置 | |
CN102541731B (zh) | 平台不可知诊断数据收集与显示 | |
CN112612448A (zh) | 前端国际化多页面打包方法、装置及计算机设备 | |
CN111427782A (zh) | 安卓动态链接库的运行方法、装置、设备及存储介质 | |
CN114077430A (zh) | 界面生成方法、装置、电子设备及存储介质 | |
CN108345458B (zh) | 一种静态编译语言与脚本语言的调用方法及*** | |
US10255276B2 (en) | Automated translation of screen images for software documentation | |
CN114048415A (zh) | 表单生成方法及装置、电子设备和计算机可读存储介质 | |
US9141353B2 (en) | Dynamically building locale objects at run-time | |
CN106843875B (zh) | 跨平台移植Python程序的方法和装置 | |
CN111399932A (zh) | 调用dll的方法、***、浏览器的处理方法和浏览器 | |
CN112905271A (zh) | 一种应用程序接口api的调用方法、装置及电子设备 | |
CN113641594B (zh) | 跨端自动化测试方法以及相关装置 | |
US8943476B2 (en) | System and method to in-line script dependencies | |
CN113138754A (zh) | 一种动态扩展浏览器Javascript引擎功能的方法、装置及电子设备 | |
Puder | A code migration framework for ajax applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |