CN108446112A - 一种调用对象的方法和装置 - Google Patents
一种调用对象的方法和装置 Download PDFInfo
- Publication number
- CN108446112A CN108446112A CN201810259196.4A CN201810259196A CN108446112A CN 108446112 A CN108446112 A CN 108446112A CN 201810259196 A CN201810259196 A CN 201810259196A CN 108446112 A CN108446112 A CN 108446112A
- Authority
- CN
- China
- Prior art keywords
- language
- class formation
- compiled
- default class
- calling
- 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
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
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种调用对象的方法和装置,在对第一语言进行编译的过程中,读取封装成预设类结构的第二语言的对象;其中,所述预设类结构为预先声明的类结构,所述预设类结构是在第一语言的编译过程中可被编译的;按照所述预设类结构的声明信息,对所述第二语言的对象进行编译,以实现对所述第二语言的对象进行调用。可见,在对第一语言进行编译时,通过将第二语言对象预先封装成可以被第一语言编译的预设类结构,以实现对第二语言对象的编译和调用,使得不同语言之间可以相互调用,解决了现有技术中由于底层语言往往不支持对应用层语言对象的编译,从而无法实现对应用层语言对象的调用的问题。
Description
技术领域
本发明涉及软件技术领域,特别是涉及一种调用对象的方法和装置。
背景技术
在许多软件架构中涉及应用层对底层对象的调用。为此,应用层语言通常都支持对底层语言对象的编译,以实现对底层语言对象的调用。而在许多场景下,底层语言有时也需要对应用层的语言对象进行调用。但是,有些底层语言往往不支持对应用层语言对象的编译,从而无法实现对应用层语言对象的调用。
发明内容
本发明所要解决的技术问题是,提供一种调用对象的方法和装置,以使得在第一语言不支持对第二语言对象进行编译的情况下在第一语言编译的过程中能够调用第二语言对象。
第一方面,本发明实施例提供了一种调用对象的方法,包括:
在对第一语言进行编译的过程中,读取封装成预设类结构的第二语言的对象;其中,所述预设类结构为在头文件中预先声明的类结构,所述预设类结构是在第一语言的编译过程中可被编译的;所述第二语言的对象属于第一语言的对象的一个属性;
按照所述预设类结构的声明信息,对所述第二语言的对象进行编译,以实现对所述第二语言的对象进行调用。
可选的,所述第一语言为C语言,所述第二语言为OC语言。
可选的,所述预设类结构为CPP类结构。
可选的,所述第一语言属于操作***中的软件开发工具包SDK,所述第二语言属于操作***中的应用层。
可选的,所述第二语言的对象包括所述第二语言的函数和/或变量。
第二方面,本发明实施例还提供了一种调用对象的装置,包括:
读取单元,用于在对第一语言进行编译的过程中,读取封装成预设类结构的第二语言的对象;其中,所述预设类结构为在头文件中预先声明的类结构,所述预设类结构是在第一语言的编译过程中可被编译的;所述第二语言的对象属于第一语言的对象的一个属性;
编译单元,用于按照所述预设类结构的声明信息,对所述第二语言的对象进行编译,以实现对所述第二语言的对象进行调用。
可选的,所述第一语言为C语言,所述第二语言为OC语言。
可选的,所述预设类结构为CPP类结构。
可选的,所述第一语言属于操作***中的软件开发工具包SDK,所述第二语言属于操作***中的应用层。
可选的,所述第二语言的对象包括所述第二语言的函数和/或变量。
与现有技术相比,本发明实施例具有以下优点:
在本发明实施例中,首先将第二语言的对象封装成预设类结构,该预设类结构可以在第一语言的编译过程中被编译;在对第一语言进行编译时,读取已封装成预设类结构的第二语言的对象,按照预设类结构的声明信息,对第二语言的对象进行编译,从而实现对第二语言的对象的调用,可见,通过本发明实施例提供的方法,在对第一语言进行编译时,通过将第二语言对象预先封装成可以被第一语言编译的预设类结构,以实现对第二语言对象的编译和调用,使得不同语言之间可以相互调用,解决了现有技术中由于底层语言往往不支持对应用层语言对象的编译,从而无法实现对应用层语言对象的调用的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中一种调用对象的方法流程图;
图2为本发明实施例中一种调用对象的装置结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
申请人经研究发现,软件在实际的运用中,涉及不同层之间对象的调用,现有技术中,应用层语言支持对底层语言对象的编译,因此,应用层语言可以调用底层语言的对象;但当底层语言需要回调应用层语言对象时,由于底层语言并不支持对应用层语言对象的编译,导致无法实现对应用程序语言对象的调用。
为了解决上述问题,在本发明实施例中,提供了一种调用对象的方法,将第二语言的对象封装成可被第一语言编译的预设类结构,在对第一语言进行编译时,可直接读取已封装成预设类结构的第二语言的对象,按照预设类结构的声明信息,对第二语言的对象进行编译,从而实现对第二语言对象的调用。
下面结合附图,通过实施例来详细说明本发明实施方式中即时通信消息的处理方法的装置的各种非限制性实施方式。
示例性方法
参见图1,该图为本发明实施例提供的一种调用对象的方法流程图,该方法可以包括以下步骤:
S101:在对第一语言进行编译的过程中,读取封装成预设类结构的第二语言的对象。
其中,所述预设类结构为在头文件中预先声明的类结构,所述预设类结构是在第一语言的编译过程中可被编译的;所述第二语言的对象属于第一语言的对象的一个属性。
本实施例中,预设类结构可以为在第一语言的头文件中预先声明的类结构,该预设类结构可以被第一语言读取,并在第一语言编译的过程中被编译。
实际应用时,第一语言可以为底层语言,第二语言可以为应用层语言。在一些实施方式中,所述第一语言属于操作***中的软件开发工具包SDK,所述第二语言属于操作***中的应用层。
其中,软件开发工具包SDK(Software Development Kit)为一些软件工程师为特定的软件包、软件框架、硬件平台、操作***等建立应用软件时的开发工具的集合。
软件架构的搭建可以利用多种编程语言实现,比如,C语言、C++语言、VB语言、Java语言、OC语言等等,编程人员可根据不同软件架构的实际需求选择不同的编程语言,或者在同一软件架构根据不同层的功能选择不同的编程语言。
在一些实施方式中,第一语言为C语言,第二语言为OC语言。
C语言是面向过程的基础语言,可以用于编写底层代码。OC(objective-C)语言可以理解为是C语言的封装版,是一种面向对象的语言,其完全兼容C语言,比C语言用起来更方便,而且更规范,多用于应用层。由于OC语言完全兼容C语言,因此可以在OC语言代码中使用C语言,但由于C语言不兼容OC语言,因此C语言不支持对OC语言的对象的编译,也就无法实现对OC语言对象的调用。
本实施例中,为实现在C语言中调用OC语言的对象,可以预先将OC语言的对象封装成预设类结构,该预设类结构由于可以在C语言编译的过程中被编译,因此,当C语言需要调用OC语言的对象时,可读取已封装成预设类结构的OC语言的对象,避免对OC语言对象的直接读取和编译。
其中,预设类结构可以预先在C语言的头文件中进行声明,以便在编译的过程中,可以从C语言的头文件中获取预设类结构的声明信息。
在一些实施方式中,预设类结构可以为CPP类结构,该CPP类结构在C语言的编译过程中可被编译。
本实施例中,预设类结构可以为第一语言和第二语言汇编时文件属性,比如,第一语言为C语言、第二语言为OC语言时,预设类结构为C语言和OC语言汇编文件的扩展名.mm。
实际应用中,可以在C语言的头文件中预先声明CPP类结构,在代码编译和调用的过程中,C语言的头文件可以直接编译CPP类结构,从而实现对CPP类结构的调用。
本实施例中,C语言可以编译CPP类结构,而OC语言的对象可以封装成CPP类结构,因此,为实现在C语言中调用OC语言的对象,可以先将OC语言的对象封装成CPP类结构,当C语言进行编译时,可以读取已封装成CPP类的OC语言的对象,以实现对OC语言的对象编译目的。
本实施例中,在C语言的头文件中声明CPP类结构,并将OC语言的对象封装成CPP类结构,在对C语言进行编译时,由于OC语言的对象已封装成CPP类结构,因此可以使得OC语言的对象编译通过。相比于现有技术中由于C语言不支持对OC语言对象的编译,如果直接在C语言的头文件中声明OC对象,导致编译不通过,本发明提供了一种方案,将OC语言的对象封装成可被C语言编译的类结构,从而使得C语言可间接编译OC对象。
可以理解的是,利用编程语言实现软件架构时,一般通过定义函数、变量、结构体等对象实现软件的具体功能,而具体对象的定义可以根据实际软件的功能来决定。
在一些实施方式中,第二语言的对象包括:第二语言的函数和/或变量。
可以理解的是,可以预先将第二语言的函数和/或变量封装成预设类结构,在对第一语言进行编译时,可以读取已封装成预设类结构的第二语言的函数和/或变量。
在具体实现时,当第一语言为C语言,第二语言为OC语言时,当底层C语言调用应用层OC语言的函数和/或变量时,首先将OC语言的函数和/或变量预先封装成CPP类结构,由于C语言可以编译CPP类结构,因此,在C语言的编译过程中,可读取已封装成CPP类结构的OC语言的函数/或变量,从而实现间接编译OC语言的函数/或变量的目的。
为便于理解,下面将结合实际的调用场景为例进行说明。
比如,在c++的类CVideoCaptureIOS中调用OC的类iosCapturedelegate,可以在实现文件.mm中定义一个结构,来封装OC的类。
这样,在实现文件中就可以使用iosCapturedelegate的对象:
iosCapturedelegate*pDelegate=[[iosCapturedelegate alloc]
initWithVideoConfiguration:Configuration];
m_pCapDelegate=new capdelegateImpl(pDelegate)。
S102:按照所述预设类结构的声明信息,对所述第二语言的对象进行编译,以实现对所述第二语言的对象进行调用。
其中,预设类结构的声明信息可以为类结构的类型、名称、参数以及参数的类型等等信息。
通过上述可知,第二语言的对象已封装成可以被第一语言编译的预设类结构,在对第一语言进行编译时,按照预设类结构在第一语言中声明信息,对第二语言的对象进行编译,从而使得第二语言的对象编译通过,以实现对第二语言的对象的调用。
实际应用时,可以预先在C语言的头文件中声明CPP类结构,并将OC语言的函数和/或对象封装成可以被C语言编译的CPP类结构,在对C语言进行编译时,按照CPP类结构的声明信息,对OC语言的函数和/或变量进行编译,编译通过时,即可实现对OC语言的函数和/或变量的调用。
为便于理解,以IOS***为例进行说明,在IOS***中,底层使用C语言实现,应用层使用OC语言实现,当底层需要调用应用层的函数和/或变量时,由于C语言不支持对OC语言函数和/或变量的编译,则无法实现底层对应用层的函数和/或变量的调用,根据本实施例提供的方法,可以预先将OC语言的函数和/或变量进行封装,将其封装成可以被C语言编译的类结构,即CPP类结构,该类结构需要在C语言中进行预先声明;当底层需要调用应用层的函数和/或变量时,C语言在进行编译时,可以读取已封装成CPP类结构的OC语言的函数/或变量,并按照预先声明的信息,对OC语言的函数和/或变量进行编译,编译通过后,实现对OC语言的函数和/或变量的调用。
通过本发明实施例提供的调用对象的方法,首先将第二语言的对象封装成可被第一语言编译的预设类结构;在对第一语言进行编译时,读取已封装成预设类结构的第二语言的对象,根据预设类结构的声明信息,对第二语言的对象进行编译,从而实现对第二语言的对象的调用,可见,通过本发明实施例提供的方法,在对第一语言进行编译时,通过将第二语言对象预先封装成可以被第一语言编译的预设类结构,以实现对第二语言对象的编译和调用,使得不同语言之间可以相互调用,解决了现有技术中由于底层语言不支持对应用层语言对象的编译,从而无法实现对应用层语言对象调用的问题。
示例性设备
基于本发明实施例提供的一种调用对象的方法,本发明还提供了一种调用对象的装置,下面结合附图对装置进行介绍。
参见图2,该图为本发明实施例提供的一种调用对象的装置结构示意图,该装置200可以包括:
读取单元201,用于在对第一语言进行编译的过程中,读取封装成预设类结构的第二语言的对象;其中,所述预设类结构为在头文件中预先声明的类结构,所述预设类结构是在第一语言的编译过程中可被编译的,所述第二语言的对象属于第一语言的对象的一个属性。
编译单元202,用于按照所述预设类结构的声明信息,对所述第二语言的对象进行编译,以实现对所述第二语言的对象进行调用。
在一些实施方式中,所述第一语言为C语言,所述第二语言为OC语言。
在一些实施方式中,所述预设类结构为CPP类结构。
在一些实施方式中,所述第一语言属于操作***中的软件开发工具包SDK,所述第二语言属于操作***中的应用层。
在一些实施方式中,所述第二语言的对象包括所述第二语言的函数和/或变量。
需要说明的是,本实施例中各个单元或模块的实现和配置可以参见图1所示方法实施例,在此不再赘述。
通过本发明实施例提供的调用对象的装置,首先将第二语言的对象封装成可被第一语言编译的预设类结构;在对第一语言进行编译时,读取已封装成预设类结构的第二语言的对象,并对第二语言的对象进行编译,从而实现对第二语言的对象的调用,可见,通过本发明实施例提供的方法,在对第一语言进行编译时,通过将第二语言对象预先封装成可以被第一语言编译的预设类结构,以实现对第二语言对象的编译和调用,解决了现有技术中由于底层语言往往不支持对应用层语言对象的编译,从而无法实现对应用层语言对象的调用的问题。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的***实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本申请的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (10)
1.一种调用对象的方法,其特征在于,包括:
在对第一语言进行编译的过程中,读取封装成预设类结构的第二语言的对象;其中,所述预设类结构为在头文件中预先声明的类结构,所述预设类结构是在第一语言的编译过程中可被编译的;所述第二语言的对象属于第一语言的对象的一个属性;
按照所述预设类结构的声明信息,对所述第二语言的对象进行编译,以实现对所述第二语言的对象进行调用。
2.根据权利要求1所述的方法,其特征在于,所述第一语言为C语言,所述第二语言为OC语言。
3.根据权利要求2所述的方法,其特征在于,所述预设类结构为CPP类结构。
4.根据权利要求2所述的方法,其特征在于,所述第一语言属于操作***中的软件开发工具包SDK,所述第二语言属于操作***中的应用层。
5.根据权利要求1所述的方法,其特征在于,所述第二语言的对象包括所述第二语言的函数和/或变量。
6.一种调用对象的装置,其特征在于,包括:
读取单元,用于在对第一语言进行编译的过程中,读取封装成预设类结构的第二语言的对象;其中,所述预设类结构为在头文件中预先声明的类结构,所述预设类结构是在第一语言的编译过程中可被编译的;所述第二语言的对象属于第一语言的对象的一个属性;
编译单元,用于按照所述预设类结构的声明信息,对所述第二语言的对象进行编译,以实现对所述第二语言的对象进行调用。
7.根据权利要求1所述的装置,其特征在于,所述第一语言为C语言,所述第二语言为OC语言。
8.根据权利要求7所述的装置,其特征在于,所述预设类结构为CPP类结构。
9.根据权利要求7所述的装置,其特征在于,所述第一语言属于操作***中的软件开发工具包SDK,所述第二语言属于操作***中的应用层。
10.根据权利要求7所述的装置,其特征在于,所述第二语言的对象包括所述第二语言的函数和/或变量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810259196.4A CN108446112A (zh) | 2018-03-27 | 2018-03-27 | 一种调用对象的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810259196.4A CN108446112A (zh) | 2018-03-27 | 2018-03-27 | 一种调用对象的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108446112A true CN108446112A (zh) | 2018-08-24 |
Family
ID=63196957
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810259196.4A Pending CN108446112A (zh) | 2018-03-27 | 2018-03-27 | 一种调用对象的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108446112A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109783077A (zh) * | 2018-12-14 | 2019-05-21 | 平安科技(深圳)有限公司 | 区块链***及其中间件***、数据上链方法、存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105335137A (zh) * | 2014-07-23 | 2016-02-17 | 国际商业机器公司 | 用于处理源文件的方法和装置 |
CN106325847A (zh) * | 2015-07-02 | 2017-01-11 | 杭州海康机器人技术有限公司 | 基于iOS平台获取应用程序功能的方法和装置 |
-
2018
- 2018-03-27 CN CN201810259196.4A patent/CN108446112A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105335137A (zh) * | 2014-07-23 | 2016-02-17 | 国际商业机器公司 | 用于处理源文件的方法和装置 |
CN106325847A (zh) * | 2015-07-02 | 2017-01-11 | 杭州海康机器人技术有限公司 | 基于iOS平台获取应用程序功能的方法和装置 |
Non-Patent Citations (2)
Title |
---|
HORKY: ""混合使用Objective-C,C++和Objective-C++"", 《HTTPS://BLOG.CSDN.NET/HORKYCHEN/ARTICLE/DETAILS/7935910》 * |
LORY17: ""C++调用Object-C"", 《HTTPS://BLOG.CSDN.NET/LORY17/ARTICLE/DETAILS/77365856》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109783077A (zh) * | 2018-12-14 | 2019-05-21 | 平安科技(深圳)有限公司 | 区块链***及其中间件***、数据上链方法、存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7167917B2 (en) | Visual tool for developing service components for use in advanced intelligent networks | |
CN105068818B (zh) | 生成渠道包的方法、装置与批量生成渠道包的方法、*** | |
US20090182565A1 (en) | Aiding Creation of Service Offers Associated with a Service Delivery Framework | |
Vrijders et al. | Prototyping the recursive internet architecture: the IRATI project approach | |
Ahamed et al. | Intelligent Broadband Multimedia Networks: Generic Aspects and Architectures Wireless, ISDN, Current and Future Intelligent Networks | |
CN101788906B (zh) | 资源管理方法和*** | |
CN104267972B (zh) | 浏览器本地接口扩展方法及装置 | |
CN109710340A (zh) | 软件工具调用方法及装置、软件工具封装方法及装置 | |
US5991541A (en) | Dynamically modifiable call processing methods and apparatus | |
CN109683973A (zh) | 一种Insyde产品BIOS定制方法、装置、终端及存储介质 | |
CN109831746A (zh) | 一种基于蓝牙广播进行数据传输的方法、装置及蓝牙设备 | |
CN104793954A (zh) | 一种免编译的图形化组合元件封装重用方法 | |
CN102799460A (zh) | 一种业务开发***、方法和业务运行***、方法 | |
CN108446112A (zh) | 一种调用对象的方法和装置 | |
CN108984339A (zh) | 数据恢复方法及相关产品 | |
CN1859356A (zh) | 一种业务处理装置及业务处理方法 | |
CN102685153A (zh) | 资源平台开放第三方服务的方法及资源平台 | |
CN109614247A (zh) | 一种声明式远程服务调用***及其执行方法 | |
CN108763430A (zh) | 配置化实现垂直业务定制化检索的方法、装置及*** | |
CN105279195B (zh) | 网页应用调用浏览器功能的方法及装置 | |
CN104660478B (zh) | 一种实现隧道间数据流串接的方法和装置 | |
CN102479068A (zh) | 保证门户网络***中应用自治性的网络应用软件集成方法 | |
CN1344093A (zh) | 网络处理器的业务创建和业务逻辑执行环境 | |
Cisco | X.25 on ISDN | |
CN104994137B (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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20180824 |
|
WD01 | Invention patent application deemed withdrawn after publication |