CN108874376B - 函数和类的导出方法及装置、终端和计算机可读存储介质 - Google Patents
函数和类的导出方法及装置、终端和计算机可读存储介质 Download PDFInfo
- Publication number
- CN108874376B CN108874376B CN201810629962.1A CN201810629962A CN108874376B CN 108874376 B CN108874376 B CN 108874376B CN 201810629962 A CN201810629962 A CN 201810629962A CN 108874376 B CN108874376 B CN 108874376B
- Authority
- CN
- China
- Prior art keywords
- function
- class
- exported
- pointer
- functions
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/60—Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/60—Methods for processing data by generating or executing the game program
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提出了一种函数和类的导出方法及装置、终端和计算机可读存储介质,其中,函数和类的导出方法包括:根据获取到的导出指令,为待导出的类添加类函数;调用C函数通过任一所述类函数调用对应的待导出函数;取出所述待导出的类的指针,以使所述待导出的类的成员发生位置偏移;在所述成员发生位置偏移后,取出所述成员的指针;将取出所述待导出的类的指针和所述成员的指针后的结果转化成目标数据类,以供lua对所述目标数据类进行导出。通过本发明的技术方案,能够极大减少代码行数,从而减少编译后的代码体积,减少人力成本,并能够降低出错率,提升编码的整体准确性。
Description
【技术领域】
本发明涉及计算机技术领域,尤其涉及一种函数和类的导出方法及装置、终端和计算机可读存储介质。
【背景技术】
目前,以cocos2dx为基础开发的游戏中,越来越多地使用lua来进行开发,使用lua开发可以解决更多的线上问题,同时也便于提升开发效率,那么将C里面的函数及数据转移到lua之中则是该项的重中之重。
cocos2dx自带的lua导出机制,是将所需要导出的类及函数均单独导出,并提供给lua使用,即cc.Marquee:creat,这种方案的明显优势是使用较为方便。
然而,这种方案只提供了函数的接口,但是并未提供类型里面数据的接口,并且,函数体积大,对于C++代码量级比较多,会占用大量的包体大小。
因此,如何解决现有的lua导出机制的弊端,成为目前亟待解决的技术问题。
【发明内容】
本发明实施例提供了一种函数和类的导出方法及装置、终端和计算机可读存储介质,旨在解决如何现有的lua导出机制的弊端,能够提升lua导出机制的效率。
第一方面,本发明实施例提供了一种函数和类的导出方法,包括:根据获取到的导出指令,为待导出的类添加类函数;调用C函数通过任一所述类函数调用对应的待导出函数;取出所述待导出的类的指针,以使所述待导出的类的成员发生位置偏移;在所述成员发生位置偏移后,取出所述成员的指针;将取出所述待导出的类的指针和所述成员的指针后的结果转化成目标数据类,以供lua对所述目标数据类进行导出。
在本发明上述实施例中,可选地,所述类函数包括luaCall函数、setProperty函数和getProperty函数。
在本发明上述实施例中,可选地,所述调用C函数通过任一所述类函数调用对应的待导出函数的步骤,包括:调用C函数通过类:函数属性的方式进行函数调用,其中,所述函数调用的方式包括luaCallStatic调用方式和luaCall调用方式。
在本发明上述实施例中,可选地,所述函数属性包括函数名和参数。
第二方面,本发明实施例提供了一种函数和类的导出装置,包括:类函数添加单元,根据获取到的导出指令,为待导出的类添加类函数;函数导出单元,调用C函数通过任一所述类函数调用对应的待导出函数;第一处理单元,取出所述待导出的类的指针,以使所述待导出的类的成员发生位置偏移;第二处理单元,在所述成员发生位置偏移后,取出所述成员的指针;类导出单元,将取出所述待导出的类的指针和所述成员的指针后的结果转化成目标数据类,以供lua对所述目标数据类进行导出。
在本发明上述实施例中,可选地,所述类函数包括luaCall函数、setProperty函数和getProperty函数。
在本发明上述实施例中,可选地,所述函数导出单元用于:调用C函数通过类:函数属性的方式进行函数调用,其中,所述函数调用的方式包括luaCallStatic调用方式和luaCall调用方式。
在本发明上述实施例中,可选地,所述函数属性包括函数名和参数。
第三方面,本发明实施例提供了一种终端,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被设置为用于执行上述第一方面实施例中任一项所述的方法。
第四方面,本发明实施例提供了一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行第一方面实施例中任一项所述的方法流程。
通过以上技术方案,针对相关技术中的lua导出机制的弊端,提出了将函数的导出和类的导出进行融合的技术方案。
具体来说,可以为每种待导出的类添加luaCall函数、setProperty函数和getProperty函数等类函数,以作为lua的固定函数接口,以便lua通过这些函数接口实现对其他函数的调用。
接着,针对对象具体值的取值和赋值操作,则是依赖于上面的Call函数,先取出待导出的类的指针,然后在依靠于待导出的类的成员的位置偏移取出成员的指针,并转化成相应的数据类,从而方便进行取值和赋值操作。
在相关技术中,将类及函数均单独导出的话,代码行数达到百万级别,而通过以上技术方案,能够极大减少代码行数,从而减少编译后的代码体积,减少人力成本,并能够降低出错率,提升编码的整体准确性。
【附图说明】
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1示出了本发明的一个实施例的函数和类的导出方法的流程图;
图2示出了本发明的一个实施例的函数和类的导出装置的框图;
图3示出了本发明的一个实施例的终端的框图。
【具体实施方式】
为了更好的理解本发明的技术方案,下面结合附图对本发明实施例进行详细描述。
应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
图1示出了本发明的一个实施例的函数和类的导出方法的流程图。
如图1所示,本发明的一个实施例的函数和类的导出方法,包括:
步骤102,根据获取到的导出指令,为待导出的类添加类函数。
步骤104,调用C函数通过任一所述类函数调用对应的待导出函数。
步骤106,取出所述待导出的类的指针,以使所述待导出的类的成员发生位置偏移。
步骤108,在所述成员发生位置偏移后,取出所述成员的指针。
步骤110,将取出所述待导出的类的指针和所述成员的指针后的结果转化成目标数据类,以供lua对所述目标数据类进行导出。
针对相关技术中的lua导出机制的弊端,提出了将函数的导出和类的导出进行融合的技术方案。
具体来说,可以为每种待导出的类添加luaCall函数、setProperty函数和getProperty函数等类函数,以作为lua的固定函数接口,以便lua通过这些函数接口实现对其他函数的调用。
接着,针对对象具体值的取值和赋值操作,则是依赖于上面的Call函数,先取出待导出的类的指针,然后在依靠于待导出的类的成员的位置偏移取出成员的指针,并转化成相应的数据类,从而方便进行取值和赋值操作。
在相关技术中,将类及函数均单独导出的话,代码行数达到百万级别,而通过以上技术方案,能够极大减少代码行数,从而减少编译后的代码体积,减少人力成本,并能够降低出错率,提升编码的整体准确性。
其中,所述类函数包括但不限于luaCall函数、setProperty函数和getProperty函数,还可以通过其他类型的函数作为lua的固定函数接口,以提升系统的兼容性。
在本发明上述实施例中,可选地,步骤104包括:调用C函数通过类:函数属性的方式进行函数调用。
通过类:函数属性的方式可以确定类下的具有相应函数属性的方式。
其中,所述函数调用的方式包括但不限于luaCallStatic调用方式和luaCall调用方式,还可以通过其他类型的函数作为函数调用的方式,以提升系统的兼容性。
在本发明上述实施例中,可选地,所述函数属性包括函数名和参数。通过函数名和参数,可在一个类下对比得到函数名和参数一致的函数,作为调用的目标。
图2示出了本发明的一个实施例的函数和类的导出装置的框图。
如图2所示,本发明的一个实施例的函数和类的导出装置200,包括:类函数添加单元202,根据获取到的导出指令,为待导出的类添加类函数;函数导出单元204,调用C函数通过任一所述类函数调用对应的待导出函数;第一处理单元206,取出所述待导出的类的指针,以使所述待导出的类的成员发生位置偏移;第二处理单元208,在所述成员发生位置偏移后,取出所述成员的指针;类导出单元210,将取出所述待导出的类的指针和所述成员的指针后的结果转化成目标数据类,以供lua对所述目标数据类进行导出。
该函数和类的导出装置200使用图1示出的实施例中任一项所述的方案,因此,具有上述所有技术效果,在此不再赘述。函数和类的导出装置200还具有以下技术特征:
在本发明上述实施例中,可选地,所述类函数包括luaCall函数、setProperty函数和getProperty函数。
在本发明上述实施例中,可选地,所述函数导出单元204用于:调用C函数通过类:函数属性的方式进行函数调用,其中,所述函数调用的方式包括luaCallStatic调用方式和luaCall调用方式。
在本发明上述实施例中,可选地,所述函数属性包括函数名和参数。
图3示出了本发明的一个实施例的终端的框图。
如图3所示,本发明的一个实施例的终端300,包括:至少一个存储器302;以及,与所述至少一个存储器302通信连接的处理器304。
其中,所述存储器存储有可被所述至少一个处理器304执行的指令,所述指令被设置为用于执行上述图1实施例中任一项所述的方案。
因此,该终端300具有和图1实施例中任一项相同的技术效果,在此不再赘述。
另外,本发明实施例提供了一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行上述图1实施例中任一项所述的方法流程。
以上结合附图详细说明了本发明的技术方案,通过本发明的技术方案,能够极大减少代码行数,从而减少编译后的代码体积,减少人力成本,并能够降低出错率,提升编码的整体准确性。
取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
需要说明的是,本发明实施例中所涉及的终端可以包括但不限于个人计算机(Personal Computer,PC)、个人数字助理(Personal Digital Assistant,PDA)、无线手持设备、平板电脑(Tablet Computer)、手机、MP3播放器、MP4播放器等。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机装置(可以是个人计算机,服务器,或者网络装置等)或处理器(Processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (10)
1.一种函数和类的导出方法,其特征在于,包括:
根据获取到的导出指令,为待导出的类添加类函数;
调用C函数通过任一所述类函数调用对应的待导出函数;
取出所述待导出的类的指针;
依靠于待导出的类的成员的位置偏移,在所述成员发生位置偏移后,取出所述成员的指针;
将取出所述待导出的类的指针和所述成员的指针后的结果转化成目标数据类,以供lua对所述目标数据类进行导出。
2.根据权利要求1所述的方法,其特征在于,
所述类函数包括luaCall函数、setProperty函数和getProperty函数,所述luaCall函数、setProperty函数和getProperty函数作为lua的固定函数接口,以便lua通过所述函数接口实现对其他函数的调用。
3.根据权利要求1所述的方法,其特征在于,所述调用C函数通过任一所述类函数调用对应的待导出函数的步骤,包括:
调用C函数通过类:函数属性的方式进行函数调用。
4.根据权利要求3所述的方法,其特征在于,
所述函数属性包括函数名和参数。
5.一种函数和类的导出装置,其特征在于,包括:
类函数添加单元,根据获取到的导出指令,为待导出的类添加类函数;
函数导出单元,调用C函数通过任一所述类函数调用对应的待导出函数;
第一处理单元,取出所述待导出的类的指针;
第二处理单元,依靠于待导出的类的成员的位置偏移,在所述成员发生位置偏移后,取出所述成员的指针;
类导出单元,将取出所述待导出的类的指针和所述成员的指针后的结果转化成目标数据类,以供lua对所述目标数据类进行导出。
6.根据权利要求5所述的装置,其特征在于,
所述类函数包括luaCall函数、setProperty函数和getProperty函数,所述luaCall函数、setProperty函数和getProperty函数作为lua的固定函数接口,以便lua通过所述函数接口实现对其他函数的调用。
7.根据权利要求5所述的装置,其特征在于,所述函数导出单元用于:
调用C函数通过类:函数属性的方式进行函数调用。
8.根据权利要求7所述的装置,其特征在于,
所述函数属性包括函数名和参数。
9.一种终端,其特征在于,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被设置为用于执行上述权利要求1至4中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,存储有计算机可执行指令,所述计算机可执行指令用于执行如权利要求1至4中任一项所述的方法流程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810629962.1A CN108874376B (zh) | 2018-06-19 | 2018-06-19 | 函数和类的导出方法及装置、终端和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810629962.1A CN108874376B (zh) | 2018-06-19 | 2018-06-19 | 函数和类的导出方法及装置、终端和计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108874376A CN108874376A (zh) | 2018-11-23 |
CN108874376B true CN108874376B (zh) | 2021-09-07 |
Family
ID=64340534
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810629962.1A Active CN108874376B (zh) | 2018-06-19 | 2018-06-19 | 函数和类的导出方法及装置、终端和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108874376B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005321954A (ja) * | 2004-05-07 | 2005-11-17 | Sony Corp | ロボット装置、情報処理システム及び情報処理方法、並びにコンピュータ・プログラム |
CN104298534A (zh) * | 2014-10-23 | 2015-01-21 | 广州华多网络科技有限公司 | 基于Lua语言的编程方法和装置 |
CN104731584A (zh) * | 2015-02-26 | 2015-06-24 | 武汉爱科唯自动化科技有限公司 | 一种开放式数控系统人机界面可定制的组态设计方法 |
CN106502745A (zh) * | 2016-10-26 | 2017-03-15 | 腾讯科技(深圳)有限公司 | 一种函数调用方法和装置 |
CN106951288A (zh) * | 2017-03-20 | 2017-07-14 | 腾讯科技(深圳)有限公司 | 一种热更资源的开发、应用方法及装置 |
CA2741595C (en) * | 2008-10-27 | 2018-05-15 | Kabushiki Kaisha Sato | Label printer api using lua program scripting language |
-
2018
- 2018-06-19 CN CN201810629962.1A patent/CN108874376B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005321954A (ja) * | 2004-05-07 | 2005-11-17 | Sony Corp | ロボット装置、情報処理システム及び情報処理方法、並びにコンピュータ・プログラム |
CA2741595C (en) * | 2008-10-27 | 2018-05-15 | Kabushiki Kaisha Sato | Label printer api using lua program scripting language |
CN104298534A (zh) * | 2014-10-23 | 2015-01-21 | 广州华多网络科技有限公司 | 基于Lua语言的编程方法和装置 |
CN104731584A (zh) * | 2015-02-26 | 2015-06-24 | 武汉爱科唯自动化科技有限公司 | 一种开放式数控系统人机界面可定制的组态设计方法 |
CN106502745A (zh) * | 2016-10-26 | 2017-03-15 | 腾讯科技(深圳)有限公司 | 一种函数调用方法和装置 |
CN106951288A (zh) * | 2017-03-20 | 2017-07-14 | 腾讯科技(深圳)有限公司 | 一种热更资源的开发、应用方法及装置 |
Non-Patent Citations (7)
Title |
---|
Array of c++ objects that Lua can access and call member functions;Ken MacLean;《https://stackoverflow.com/questions/20852874/array-of-c-objects-that-lua-can-access-and-call-member-functions》;20140101;全文 * |
lua-cpp-wrapper;baixuefeng;《https://github.com/baixuefeng/lua-cpp-wrapper》;20171010;全文 * |
Lua使用C++中的类——调用类方法并访问类变量;CoolGaming;《https://blog.csdn.net/peoplezhou/article/details/43308271》;20150130;全文 * |
Lua的C++封装;&大飞;《https://www.cnblogs.com/cnxkey/articles/4252584.html》;20150127;全文 * |
把C++类成员函数集成到lua;王大王;《https://www.cnblogs.com/xiaowangba/archive/2008/04/22/6313801.html》;20080422;全文 * |
注册C函数与类成员函数到lua;王大王;《https://www.cnblogs.com/xiaowangba/archive/2008/04/20/6313802.html》;20080420;全文 * |
直接调用类成员函数地址;7069202a;《https://www.cnblogs.com/cccc123/archive/2010/04/17/1714162.html》;20100417;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN108874376A (zh) | 2018-11-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107229559B (zh) | 针对业务系统的测试完整度的检测方法和装置 | |
CN109587252A (zh) | 运营商参数的加载方法、装置、电子设备及存储介质 | |
CN109413154A (zh) | 数据格式转换方法、装置、计算机设备及存储介质 | |
CN110532107B (zh) | 接口调用方法、装置、计算机设备及存储介质 | |
CN108366052B (zh) | 验证短信的处理方法及系统 | |
CN104516921A (zh) | 自动回复方法及装置 | |
CN113157854A (zh) | Api的敏感数据泄露检测方法及系统 | |
CN114238948A (zh) | 一种应用程序检测方法、装置、电子设备及存储介质 | |
CN105573733A (zh) | 浏览器与web前端通信的方法、web前端及系统 | |
CN112861844A (zh) | 业务数据的处理方法、装置和服务器 | |
CN104268472A (zh) | 还原被第三方动态库修改函数地址的方法和装置 | |
CN108874376B (zh) | 函数和类的导出方法及装置、终端和计算机可读存储介质 | |
WO2021072872A1 (zh) | 基于字符转换的姓名存储方法、装置、计算机设备 | |
CN109376064B (zh) | 一种接口测试报告的生成方法及设备 | |
CN114564206A (zh) | 一种数据非空校验方法、装置、设备及可读存储介质 | |
CN109324973A (zh) | 一种软件测试方法、装置、设备及计算机可读存储介质 | |
CN113220949B (zh) | 一种隐私数据识别系统的构建方法及装置 | |
CN109992253A (zh) | 从表生成源代码及使用该源代码的方法、系统和设备 | |
CN113722321A (zh) | 数据导出方法、装置和电子设备 | |
CN112783500B (zh) | 编译优化信息生成方法、装置及电子设备 | |
US20170286074A1 (en) | Electronic Device and Method for Multiple Compiling Platforms | |
CN114374686A (zh) | 基于浏览器的文件处理方法、装置和设备 | |
CN109426720B (zh) | 接口参数的验证方法及相关装置 | |
CN110245231B (zh) | 一种针对乱码的训练样本特征提取方法、装置及设备 | |
CN110852083A (zh) | 一种短信模板的生成方法及装置 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |