[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

CN111290746A - 对象访问方法、装置、设备及存储介质 - Google Patents

对象访问方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN111290746A
CN111290746A CN202010091143.3A CN202010091143A CN111290746A CN 111290746 A CN111290746 A CN 111290746A CN 202010091143 A CN202010091143 A CN 202010091143A CN 111290746 A CN111290746 A CN 111290746A
Authority
CN
China
Prior art keywords
class
original
proxy
virtual machine
access request
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
Application number
CN202010091143.3A
Other languages
English (en)
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202010091143.3A priority Critical patent/CN111290746A/zh
Publication of CN111290746A publication Critical patent/CN111290746A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45562Creating, deleting, cloning virtual machine instances

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本申请实施例公开了一种对象方法方法、装置、设备及存储介质,属于计算机技术领域。该方法包括:获取第一虚拟机中的原始类与第二虚拟机中的代理类的第一关联关系;通过所述第二虚拟机接收访问请求,所述访问请求携带所述第二虚拟机中的代理类;根据所述第一关联关系和所述访问请求,对所述代理类关联的原始类进行访问。通过原始类与代理类之间的关联关系,可以通过访问代理类来访问该原始类,实现了同时运行第一虚拟机和第二虚拟机,并通过第二虚拟机与第一虚拟机进行交互,并且该种交互方式,交互成本低,易于应用到各种场景中。

Description

对象访问方法、装置、设备及存储介质
技术领域
本申请实施例涉及计算机技术领域,特别涉及一种对象访问方法、装置、设备及存储介质。
背景技术
随着计算机技术的不断进步,应用开发得到了广泛的发展,开发应用的编辑器可以运行于应用开发框架中。但是若编辑器所采用的第一虚拟机与应用开发框架所采用的第二虚拟机不同的话,由于两个不同的虚拟机无法直接交互,则会导致第二虚拟机无法访问第一虚拟机中的对象,从而该编辑器无法运行于该应用开发框架中。
目前可以将运行在第一虚拟机中的代码全部移植到第二虚拟机中,则在第二虚拟机中即可实现应用开发,而无需访问第一虚拟机。但是由于第一虚拟机中有大量代码是无法被移植的,并不能移植到第二虚拟机中,从而导致该编辑器无法进行应用开发。
发明内容
本申请实施例提供了一种虚拟对象控制方法、装置及存储介质,能够丰富控制方式,使应用范围广泛。所述技术方案如下:
一方面,提供了一种对象访问方法,所述方法包括:
获取第一虚拟机中的原始类与第二虚拟机中的代理类的第一关联关系;
通过所述第二虚拟机接收访问请求,所述访问请求携带所述第二虚拟机中的代理类;
根据所述第一关联关系和所述访问请求,对所述代理类关联的原始类进行访问。
另一方面,提供了一种对象访问装置,所述装置包括:
获取模块,用于获取第一虚拟机中的原始类与第二虚拟机中的代理类的第一关联关系;
接收模块,用于通过所述第二虚拟机接收访问请求,所述访问请求携带所述第二虚拟机中的代理类;
访问模块,用于根据所述第一关联关系和所述访问请求,对所述代理类关联的原始类进行访问。
在一种可能实现方式中,所述获取模块,包括:
获取单元,用于获取第一虚拟机的第一程序集和第二虚拟机的第二程序集,所述第一程序集中包括至少一个原始类,所述第二程序集包括至少一个代理类;
确定单元,用于确定所述第一虚拟机中与所述第二虚拟机中的代理类对应的原始类;
建立单元,用于建立所述原始类与对应的代理类的第一关联关系。
在一种可能实现方式中,所述确定单元,用于根据所述第二虚拟机中任一代理类中的绑定信息,确定所述任一代理类对应的原始类。
在一种可能实现方式中,所述确定单元,用于执行以下至少一项:
响应于所述第二程序集中任一代理类的接口与所述第一程序集中任一原始类的接口相同,确定所述任一原始类为所述任一代理类对应的原始类;
响应于所述第二程序集中任一代理类的类名称与所述第一程序集中任一原始类的类名称相同,确定所述任一原始类为所述任一代理类对应的原始类;
响应于所述第二程序集中任一代理类的命名空间与所述第一程序集中任一原始类的命名空间相同,确定所述任一原始类为所述任一代理类对应的原始类。
在一种可能实现方式中,所述建立单元,还用于将所述原始类的描述信息添加至所述代理类中,所述描述信息用于确定所述原始类的地址。
在一种可能实现方式中,所述建立单元,还用于建立所述原始类中的原始对象和所述代理类中与所述原始对象对应的代理对象的第二关联关系。
在一种可能实现方式中,所述建立单元,还用于响应于任一对象为所述原始类中的原始对象,在所述原始类关联的代理类中创建所述原始对象对应的代理对象,建立所述原始对象和所述代理对象的第二关联关系。
在一种可能实现方式中,所述原始类包括字段、方法、属性中的至少一种对象,所述建立单元,还用于执行以下至少一项:
确定所述代理类中与所述原始类中的原始字段对应的代理字段,建立所述原始字段与所述代理字段的第二关联关系;
确定所述代理类中与所述原始类中的原始方法对应的代理方法,建立所述原始方法与所述代理方法的第二关联关系;
确定所述代理类中与所述原始类中的原始属性对应的代理属性,建立所述原始属性与所述代理属性的第二关联关系。
在一种可能实现方式中,所述访问请求携带所述代理类中的代理对象;所述访问模块,包括:
获取单元,用于获取所述原始类中的原始对象与所述代理类中的代理对象的第二关联关系;
访问单元,用于根据所述第一关联关系、所述第二关联关系和所述访问请求,对所述代理类关联的原始类中,与所述代理对象关联的原始对象进行访问。
在一种可能实现方式中,所述访问单元,用于执行以下至少一项:
通过所述访问请求访问所述原始类,获取所述第一虚拟机中对应的数据,所述访问请求用于获取字段;
通过所述访问请求访问所述原始类,更改所述第一虚拟机中对应的字段,所述访问请求用于设置字段;
根据所述访问请求访问所述原始类,调用所述第一虚拟机中对应的方法,所述访问请求用于调用方法或者访问属性。
在一种可能实现方式中,所述访问模块,包括:
转换单元,用于将所述访问请求携带的访问数据转换为所述第一虚拟机支持的数据格式;
访问单元,用于根据转换后的访问请求,对所述原始类进行访问。
在一种可能实现方式中,所述装置还包括:
转换模块,用于响应于访问所述原始类后得到返回值,将所述返回值的格式转换为所述第二虚拟机支持的格式;
下发模块,用于根据所述第一关联关系,将转换后的返回值下发至所述第二虚拟机。
在一种可能实现方式中,所述获取单元,用于获取所述第一程序集,确定所述第一程序集中的每个原始类;生成所述每个原始类在所述第二虚拟机中对应的代理类;根据每个代理类,生成所述第二程序集。
在一种可能实现方式中,所述获取单元,用于根据所述原始类的描述信息,生成所述每个原始类对应的代理类,所述代理类的接口与对应的原始类的接口相同。
在一种可能实现方式中,所述代理类包括绑定信息,所述获取单元,用于根据所述每个原始类的描述信息,生成所述每个原始类的绑定信息。
另一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条程序代码,所述至少一条程序代码由所述处理器加载并执行,以实现如上述方面所述的对象访问方法。
另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条程序代码,所述至少一条程序代码由处理器加载并执行,以实现如上述方面所述的对象访问方法。
本申请实施例提供的技术方案带来的有益效果至少包括:
本申请实施例提供的对象访问方法、装置、设备及存储介质,通过获取第一虚拟机中的原始类与第二虚拟机中的代理类的第一关联关系,通过第二虚拟机接收访问请求,该访问请求携带第二虚拟机中的代理类,根据第一关联关系和访问请求,对代理类关联的原始类进行访问。通过原始类与代理类之间的关联关系,可以通过访问代理类来访问该原始类,实现了同时运行第一虚拟机和第二虚拟机,并通过代理类与原始类的关联关系,使得第二虚拟机与第一虚拟机可以进行交互,并且该种交互方式,交互成本低,易于应用到各种场景中。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请实施例的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种对象访问方法的流程图;
图2是本申请实施例提供的一种第二程序集生成方法的流程图;
图3是本申请实施例提供的一种建立关联关系方法的流程图;
图4是本申请实施例提供的一种访问原始对象方法的流程图;
图5是本申请实施例提供的一种应用程序的显示界面示意图;
图6是本申请实施例提供的一种编辑器的界面示意图;
图7是本申请实施例提供的一种对象访问装置的结构示意图;
图8是本申请实施例提供的一种对象访问装置的结构示意图;
图9是本申请实施例提供的一种终端的结构示意图;
图10是本申请实施例提供的一种服务器的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
可以理解,本申请所使用的术语“第一”、“第二”等可在本文中用于描述各种概念,但除非特别说明,这些概念不受这些术语限制。这些术语仅用于将一个概念与另一个概念区分。举例来说,在不脱离本申请的范围的情况下,可以将第一虚拟机称为第二虚拟机,且类似地,可将第二虚拟机称为第一虚拟机。
本申请所使用的术语“至少一个”、“多个”、“每个”、“任一”,至少一个包括一个、两个或者两个以上,多个包括两个或者两个以上,而每个是指对应的多个中的每一个,任一是指多个中的任意一个,举例来说,多个对象包括3个对象,而每个是指这3个对象中的每一个对象,任一是指这3个对象的任意一个,可以是第一个,也可以是第二个,还可以是第三个。
.NET(第三代互联网):是一种操作平台,用户可以在.NET中构建各种应用。
.NET Framework(共通语言运行平台):是一个的应用开发框架,可以用于构建具有视觉上引人注目的用户体验的应用程序,实现跨技术边界的无缝通信,并且能支持各种业务流程。
CLR(Common Language Runtime,通用语言运行时):是.NET的虚拟机的名称。CLR运行一种称为通用中间语言的字节码,是对CLI(Common Language Infrast ructure,通用语言架构)的实现版本。
CLI(Common Language Infrast ructure,通用语言架构):CLI定义了构成.NETFramework基础结构的可执行码以及代码的运行时环境的规范,它定义了一个语言无关的跨体系结构的可执行码以及代码的运行时环境的规范,使得开发者可以用规范内定义的各种高级语言来开发软件,并且无需修正即可将应用运行在不同的计算机体系结构上。
Mono:是一个自由开放源码项目,包括C#编译器和通用语言架构。该项目的目标是创建一系列符合ECMA(European Computer Manufacturers Association,欧洲计算机制造商协会)标准(Ecma-334和Ecma-335)的.NET工具。与.NET Framework不同的是:Mono项目不仅可以运行于Windows系统上,还可以运行于Linux,FreeBSD,Unix,OS X和Solaris等系统,还可以运行于一些游戏平台,例如:Playstation 3,Wii或XBox 360。
Mono虚拟机:是一个可以运行C#代码的虚拟机,和CLR虚拟机相比,Mono虚拟机可以跨平台运行。
UnityEngine(引擎):是一款跨平台的2D/3D游戏引擎。
程序集(Assembly):是通过编译代码得到的,供CLR进一步编译执行的代码库,在WINDOWS系统中,它一般表现为·dll或者是·exe的格式。该程序集的代码采用通用中间语言(Common Intermediate Language,CIL)表示,在运行时被即时编译为机器语言在.NETFramework实现中,这种即时编译是通用语言运行时(CLR)的一部分。在编译应用程序中,所创建的CIL代码存储在一个程序集中,程序集包括可执行的应用程序文件(进程程序集(EXE))和其他应用程序使用的库(库程序集(DLL))。
C#:是微软推出的一种基于.NET框架的、面向对象的高级编程语言。C#以.NET框架类库作为基础。
Mono.Ceil:是一个可以静态读取与分析ECMA CIL格式文件的工具,通过该工具可以离线的分析出程序集中的各种类型与属性信息。
mono.dll:Mono虚拟机在Windows下的执行模块,是Mono虚拟机的主体。它具有一些导出函数可以被外部直接调用。
MonoApi(Application Programming Interface,应用程序接口):Mono虚拟机内部用于支持C#运行的一些函数。这些函数通过mono.dll导出,且可以被外部调用。
MonoType(类型):Mono虚拟机中等同于CLR虚拟机中System.Type的类型,用于描述一个具体类型。
MonoObject(对象):Mono虚拟机中等同于CLR虚拟机中的System.Object的公共基类类型。
MonoMethod(方法):Mono虚拟中等同于CLR中的ystem.Reflection.MethodI-nfo的类型,用于描述一个方法。
MonoField(字段):Mono虚拟中等同于CLR中的System.Reflection.FieldInfo的类型,用于描述一个字段。
MonoClass(类):Mono虚拟机内部用于描述一个类型。
MonoArray(数组):Mono虚拟机中的数组。
面向对象程序设计(Object-oriented programming,OOP):是一种具有对象概念的应用程序编程典范,同时也是一种应用程序开发的抽象方针。它可以包括数据、属性、代码与方法,其中,对象是指类的实例。它也可以将对象作为程序的基本单元,将程序和数据封装其中,以提高应用的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。
类(class):在面向对象编程中是一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述了所创建的对象共同的属性和方法。
对象:在应用系统中,对象具有唯一的标识符,对象包括属性(Properties)和方法(Methods),属性是需要记忆的信息,方法是对象能够提供的服务。在面向对象(ObjectOriented)的应用程序中,对象(Object)是某一个类(Class)的实例(Instance)。
属性(Properties):在面向对象编程语言中,属性是一种介于字段和方法之间的概念,属性的代码写法与字段的代码写法类似,但是属性代码实际上是一个方法调用。在C#中,属性通过隐藏的获取方法(Getter),设置方法(Setter)来实现。
本申请实施例提供的一种对象访问方法,可应用于计算机设备中,该计算机设备可以是手机、电脑、平板电脑等多种类型的终端,还可以是服务器,该服务器可以是一台服务器,或者由若干台服务器组成的服务器集群,或者是一个云计算服务中心,本申请实施例对此不做限定。
本申请实施例提供的对象访问方法,可应用于软件开发的场景下。
例如,通过开发应用的编辑器在应用开发框架中开发应用的场景。
其中,编辑器采用的是第一虚拟机,应用开发框架采用的是第二虚拟机,由于两个不同的虚拟机无法直接交互,则会导致第二虚拟机无法访问第一虚拟机中的对象,从而该编辑器无法运行于该应用开发框架中。采用本申请实施例提供的对象访问方法,可以在第二虚拟机中创建代理类,获取第一虚拟机中原始类与第二虚拟机中的代理类的第一关联关系,通过第二虚拟机接收访问请求,该访问请求携带所述第二虚拟机中的代理类;根据第一关联关系和访问请求,对该代理类关联的原始类进行访问,实现了第二虚拟机对第一虚拟机的访问,间接实现了两个虚拟机的交互,从而该编辑器可以运行于应用开发框架中,进行应用开发。
图1是本申请实施例提供的一种对象访问方法的流程图,应用于计算机设备中,如图1所示,该方法包括:
101、计算机设备获取第一虚拟机的第一程序集,确定该第一程序集中的每个原始类。
其中,虚拟机(Virtual Machine)指通过应用程序模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在计算机设备中能够完成的工作在虚拟机中均可以实现。其中,第一虚拟机可以是任一种类型的虚拟机,例如,Mono虚拟机、CLR虚拟机、linux虚拟机、Java虚拟机等,本申请实施例对第一虚拟机不做限定。
程序集是一个由类型定义、数据文件和资源文件组成的逻辑集合,该程序集可以由虚拟机运行。第一虚拟机的第一程序集可以看做是由第一虚拟机运行的程序集。
在应用开发场景下,可以采用编辑器开发应用,该编辑器采用的虚拟机为第一虚拟机,在采用编辑器开发应用的过程中,可以开发多个项目,其中,可以将一个项目的代码编译到一个程序集中,也可以将多个项目的代码编译到一个程序集中,还可以将一个项目的代码编译到多个程序集中;通过第一虚拟机可以运行该编译到程序集中的代码,从而第一虚拟机的第一程序集可以是一个程序集,也可以是多个程序集,本申请实施例对此不做限定。
其中,程序集可以包括至少一个命名空间,每个命名空间可以包括至少一个类型,其中,程序集中的原有的类型可以为该程序集的原始类,鉴于本申请生成了与原始类对应的代理类,因此,在本申请中程序集的原始类不仅是程序集中原有的类型,还是用于生成代理类的类型。在一种可能实现方式中,计算机设备获取第一虚拟机的第一程序集,确定该第一程序集中的每个原始类,可以包括:计算机设备获取第一虚拟机运行的至少一个程序集,确定该至少一个程序集中的第一程序集,该第一程序集为第一虚拟机运行、且其他虚拟机需要访问的程序集;根据该第一程序集,确定该第一程序集中的每个原始类。
其中,第一虚拟机运行的至少一个程序集可以是第一虚拟机运行的全部程序集,也可以是第一虚拟机运行的部分程序集,本申请实施例在此不做限定。另外,计算机设备可以通过分析对该至少一个程序集中的每个程序集进行分析,确定该程序集是否需要被其他虚拟机访问,若该程序集需要被其他虚拟机访问,则该程序集为第一程序集,遍历该至少一个程序集后,得到该第一虚拟机的第一程序集。
例如,计算机设备可以使用使用Mono.Ceil分析Mono程序集,从Mono程序集中确定需要被访问的第一程序集。
可选的,计算机设备根据该第一程序集,确定该第一程序集中的每个原始类,可以包括:遍历该第一程序集中的类型,将该第一程序集中用于与其他虚拟机交互使用的类型作为原始类。其中,用于与其他虚拟机交互使用的类型为其他虚拟机与第一虚拟机交互需要访问的类型。
可选的,确定第一程序集中用于与其他虚拟机交互使用的类型,可以包括以下至少一项:
(1)对于第一程序集中的任一类型,响应于该类型的外部配置满足目标条件,确定该类型为用于与其他虚拟机交互使用的类型。
(2)对于第一程序集中的任一类型,响应于该类型的类型属性为目标属性,确定该类型为用于与其他虚拟机交互使用的类型。
例如,如图2所示,计算机设备使用Mono.Ceil分析第一程序集,遍历该第一程序集中的类型。通过外部配置或类型属性分析该类型是否需要导出为CLR交互使用。如果需要导出,则该类型为第一程序集中的原始类。如果不需要导出,则继续分析下一类型,直至第一程序集中的每个类型分析完成后结束。
另外,可选的,第一程序集还可以是第一虚拟机运行的全部程序集,那么计算机设备可以遍历第一程序集,确定第一程序集中用于与其他虚拟机交互使用的类型,将该类型作为第一程序集的原始类。其中,确定第一程序集中用于与其他虚拟机交互使用的类型的方法与上述方法类似,在此不再一一赘述。
例如,如图2所示,计算机设备使用Mono.Ceil分析第一程序集,该第一程序集为第一虚拟机运行的全部程序集,遍历该第一程序集中的类型。通过外部配置或类型属性分析该类型是否需要导出为CLR交互使用。如果需要导出,则该类型为第一程序集中的原始类。如果不需要导出,则继续分析下一类型,直至第一程序集中的每个类型分析完成后结束。
102、计算机设备生成每个原始类在第二虚拟机中对应的代理类。
其中,第二虚拟机为与第一虚拟机不同类型的任一虚拟机,该第二虚拟机可以是CLR虚拟机、Mono虚拟机、linux虚拟机、Java虚拟机等,本申请实施例对第二虚拟机不做限定。
另外,第一虚拟机可以是开发应用的编辑器所采用的虚拟机,第二虚拟机可以是应用开发框架所采用的虚拟机;或者,第一虚拟机可以是应用开发框架所采用的虚拟机,第二虚拟机为开发应用的编辑器所采用的虚拟机。例如,第一虚拟机为Mono虚拟机,第二虚拟机为CLR虚拟机。
在一种可能实现方式中,计算机设备生成每个原始类在该第二虚拟机中对应的代理类,可以包括:根据原始类的描述信息,生成每个原始类对应的代理类,该代理类的接口与对应的原始类的接口相同。
其中,原始类的描述信息可以是该原始类的类型的描述信息,如,类名称、命名空间等。该原始类可以包括字段、属性、方法等至少一个对象,该原始类的描述信息还可以是该至少一个对象的描述信息。例如,若原始类中包括字段时,该描述信息可以包括字段名称、命名空间、字段地址等中的至少一项;若原始类中包括属性,该描述信息可以包括属性名称、命名空间等中的至少一项;若原始类中包括方法,该描述信息可以包括方法名称、参数个数、参数类型、返回值类型等中的至少一项。
例如:在计算机设备确定第一程序集的任一类型为原始类之后,可以继续分析该原始类的所有对象,获取每个对象的描述信息,其中,原始类的对象可以是字段(Fields)、属性(Properties)、方法(Methods)等,将每个成员的描述信息都生成到代理类中,保持字段名、属性名、方法名、方法签名等对外接口不变。代理类的内部通过代理机制将这些对外接口的访问转发到第一虚拟机中。其中,将每个成员的描述信息都生成到代理类中是指生成一个可以被CLR直接使用的C#类文件。
在一种可能实现方式中,计算机设备生成计算机设备生成每个原始类在该第二虚拟机中对应的代理类,可以包括:根据每个原始类的描述信息,生成该原始类的绑定信息。其中,绑定信息用于标识原始类与代理类之间的绑定关系,计算机设备可以根据绑定信息确定代理类对应的原始类。其中,代理类的绑定信息中可以包括该代理类对应的原始类的描述信息,可以根据该描述信息确定该代理类对应的原始类。
可选的,计算机设备根据原始类的描述信息,生成每个原始类对应的代理类,可以包括:计算机设备在确定第一程序集的任一类型为原始类之后,获取该原始类包括的任一对象,响应于该对象为目标对象,获取该原始类中每个目标对象的描述信息,根据该描述信息,生成该原始类对应的代理类,其中,目标对象为第二虚拟机需要访问的对象。也就是说,在生成原始类对应的代理类时,无需根据原始类中的每个对象来生成代理类,只需根据有访问需求的目标对象,来生成代理类即可,在保证代理类能够满足通过第二虚拟机访问第一虚拟机的基础上,减少了代理类的大小,也避免了在生成代理类时,在代理类中生成无用的代理对象,而带来的资源浪费。
例如:在计算机设备确定第一程序集的任一类型为原始类之后,可以继续分析该原始类的所有对象,确定任一对象为目标对象后,获取该目标对象的描述信息,将每个目标对象的描述信息都生成到代理类中,保持字段名、属性名、方法名、方法签名等对外接口不变。代理类的内部通过代理机制将这些对外接口的访问转发到第一虚拟机中。其中,将每个对象的描述信息都生成到代理类中是指生成一个可以被CLR直接使用的C#类文件。
103、计算机设备根据每个代理类,生成第二程序集。
可选地,计算机设备根据每个代理类,生成第二程序集可以包括:计算机设备可以根据每个代理类,构建代理类对应的项目,对该项目进行编译得到第二程序集。
例如,如图2所示,计算机设备将生成的C#类文件构建成一个C#项目,调用编译工具将编译此项目,由此生成一个全新的用于给第二虚拟机调用的第二程序集201。第二程序集中的类型接口与第一程序集中对应的类型接口保持一致,这样在第二虚拟机中使用这些类型时,与直接在第一虚拟机中使用是一样的。
也就是说,代理类是一个在第二虚拟机中使用的类型,该代理类的作用是帮助使用者可以以在第一虚拟机中访问某个类型的方式在第二虚拟机中访问该类型。代理类具有和原始类相同的对外接口,对该代理类的字段、属性、方法的访问,等同于直接访问第二虚拟机中的原始类。
需要说明的是,上述步骤101至步骤103可以在离线过程中进行,也可以是在线执行,也就是说,在执行完步骤103之后,可以立刻执行步骤104,也可以暂不执行步骤104,而是在计算机设备再次启动时执行,也可以是在其他时机执行。本申请实施例对上述步骤101至步骤103的执行时机以及步骤104的时机不做限定。
104、计算机设备根据第一程序集和第二程序集,确定第一虚拟机中与第二虚拟机中的代理类对应的原始类,建立原始类与对应的代理类的第一关联关系。
其中,第一程序集中包括至少一个原始类,第二程序集中包括至少一个代理类,计算机设备可以遍历该第一程序集和第二程序集,确定第二虚拟机中与第一虚拟机中的原始类对应的代理类。
在一种可能实现方式中,确定第一虚拟机中与第二虚拟机中的代理类对应的原始类,可以包括:根据第二虚拟机中任一代理类中的绑定信息,确定该任一代理类对应的原始类。其中,该绑定信息中可以包括原始类的类名称、命名空间等信息,计算机设备可以根据第二虚拟机中的任一代理类中的绑定信息,确定原始类的类名称、命名空间等,从而找到该原始类。
例如,如图3所示,计算机设备通过执行步骤301和步骤302来建立第一关联关系。
步骤301:遍历第二程序集,找到第二程序集中的代理类。
步骤302:根据代理类中的绑定信息,确定每个代理类对应的原始类,建立代理类与原始类的第一关联关系。
在一种可能实现方式中,确定第一虚拟机中与第二虚拟机中的代理类对应的原始类,包括以下至少一项:
(1)响应于第二程序集中任一代理类的接口与第一程序集中任一原始类的接口相同,确定任一原始类为任一代理类对应的原始类。
由于在根据原始类生成代理类的过程中,会保证该原始类的对外接口与代理类的对外接口一致,因此,可以根据第二程序集中任一代理类的接口与第一程序集中任一原始类的接口是否相同,来确定该原始类是否为该代理类对应的原始类。
(2)响应于第二程序集中任一代理类的类名称与第一程序集中任一原始类的类名称相同,确定任一原始类为任一代理类对应的原始类。
由于在根据原始类生成代理类的过程中,会保持原始类的类名称与代理类的类名称不变,因此,可以根据代理类的类名称和原始类的类名称,来确定该原始类是否为该代理类对应的原始类。
(3)响应于第二程序集中任一代理类的命名空间与第二程序集中任一原始类的命名空间相同,确定任一原始类为任一代理类对应的原始类。
由于同一命名空间中相同的类名称表示同一个类型,因此,还可以根据原始类与代理类是否属于同一命名空间,来确定该原始类是否为该代理类对应的原始类。
需要说明的是,上述三种方式仅是本申请实施例对确定第一虚拟机中与第二虚拟机中的代理类对应的原始类的方式进行示例性说明,也就是说,还可以通过其他方式来确定第一虚拟机中与第二虚拟机中的代理类对应的原始类,本申请实施例对此不做限定。
另外,上述提供的三种方式可以任意选择至少两种方式进行结合,例如,在一种可能实现方式中,确定第一虚拟机中与第二虚拟机中的代理类对应的原始类,可以包括:响应于第二程序集中任一代理类的类名称与第一程序集中任一原始类的类名称相同、且该任一代理类的命名空间与该任一原始类的命名空间相同,确定该任一原始类为该任一代理类对应的原始类。
其中,类型的描述信息可以包括类名称和命名空间中的至少一项,也就是说,可以代理类的描述信息和原始类的描述信息来确定,该原始类是否为该代理类对应的原始类。可选的,计算机设备响应于第二程序集中任一代理类的描述信息与第一程序集中任一原始类的描述信息相同,确定该任一原始类为该任一代理类对应的原始类。
需要说明的是,本申请仅是以通过代理类确定该代理类对应的原始类为例进行说明,而在另一实施例中,还可以通过原始类确定该原始类对应的代理类,本申请实施例对此不做限定。
在一种可能实现方式中,建立原始类与代理类的第一关联关系,可以包括:将原始类的描述信息添加至代理类中,该描述信息用于确定该原始类的地址。
例如,如图3所示,在计算机设备启动时,建立原始类与代理类的第一关联关系,其中,该第一关联关系可以是字典关系,该字典关系是指原始类与代理类的关联关系像字典一样,可以根据原始类查询到该原始类对应的代理类,也可以根据该代理类查询该该代理类对应的原始类。
在运行时,第二虚拟机内部对于类型的表达是由内部的一系列对象来实现的,比如,在Mono虚拟机中该一系列对象可以是MonoType,MonoField,MonoMethod,MonoClass等,本申请实施例实现代理类的方法可以是通过直接调用mono.dll中的API,找到该原始类的描述信息,将该描述信息保存在代理类中,这样代理类就拥有了原始类的描述信息。
可选的,代理类需要和第二虚拟机中的原始类进行关联,计算机设备可以通过MonoApi mono_assembly_get_image,mono_class_from_name将原始类和代理类进行关联。
105、计算机设备建立原始类中原始对象与代理类中的代理对象的第二关联关系。
在一种可能实现方式中,在建立原始类与代理类的第一关联关系之后,还可以建立原始类中原始对象与代理类中的代理对象的第二关联关系。
可选的,计算机设备建立原始类中原始对象与代理类中的代理对象的第二关联,可以包括:根据代理类中代理对象的绑定信息,确定与该代理对象绑定的原始对象。可选的,该代理对象的绑定信息中可以包括该代理对象关联的原始对象的描述信息,计算机设备可以根据该原始对象的描述信息,从原始类中确定该原始对象。
可选的,该原始类包括字段、方法、属性中的至少一种对象,建立原始类中原始对象与代理类中的代理对象的第二关联关系,还包括以下至少一项:
(1)确定代理类中与原始类中的原始字段对应的代理字段,建立该原始字段与该代理字段的第二关联关系。
其中,原始字段为原始类中的字段,代理字段为代理类中的字段,由于原始类与代理类是关联关系,代理类是根据原始类的描述信息生成的,因此,代理类中的代理字段与原始类中的原始字段也是关联的,因此,可以建立该原始字段与代理字段的第二关联关系。
其中,确定代理类中与原始类中的原始字段对应的代理字段可以包括:响应于原始类中的任一原始字段的描述信息与代理类中的任一代理字段的描述信息相同,确定该任一原始字段为该任一代理字段对应的原始字段。
例如,响应于任一代理字段的字段名与任一原始字段的字段名相同,确定该代理字段为该原始字段对应的代理字段。例如,Mono虚拟机的原始类包括字段MonoField,CLR虚拟机的代理类包括字段CLRField,由此可以建立字段MonoField和字段CLRField的第二关联关系。
另外,建立该原始字段与该代理字段的第二关联关系,可以包括:将该原始字段的描述信息添加到该代理字段中,该描述信息可以用于确定原始字段的地址。
另外,建立该原始字段与该代理字段的第二关联关系还可以通过MonoApimono_class_get_field_from_name实现。
(2)确定代理类中与原始类中的原始方法对应的代理方法,建立该原始方法与该代理方法的第二关联关系。
其中,确定代理类中与原始类中的原始方法对应的代理方法的方式,与确定代理类中与原始类中的原始字段对应的代理字段的方式类似;而建立该原始方法与该代理方法的第二关联关系,与建立该原始字段与该代理字段的第二关联关系的方式类似,在此不再一一赘述。
另外,建立该原始方法与该代理方法的第二关联关系还可以通过MonoApimono_method_signature实现。
(3)确定代理类中与原始类中的原始属性对应的代理属性,建立该原始属性与该代理属性的第二关联关系。
其中,确定代理类中与原始类中的原始属性对应的代理属性的方式,与确定代理类中与原始类中的原始字段对应的代理字段的方式类似;而建立该原始属性与该代理属性的第二关联关系,与建立该原始字段与该代理字段的第二关联关系的方式类似,在此不再一一赘述。
另外,建立该原始属性与该代理属性的第二关联关系还可以通过MonoApimono_method_signature实现。
在一种可能实现方式中,建立原始类中原始对象与代理类中的代理对象的第二关联关系,还包括以下至少一项:
(1)确定原始类中与代理类中的代理字段对应的原始字段,建立该原始字段与该代理字段的第二关联关系。
(2)确定原始类中与代理类中的代理方法对应的原始方法,建立该原始方法与该代理方法的第二关联关系。
(3)确定原始类中与代理类中的代理属性对应的原始属性,建立该原始属性与该代理属性的第二关联关系。
在另一种可能实现方式中,建立原始类与代理类的第一关联关系之后,该方法还包括:响应于任一对象为原始类中的原始对象,在原始类对应的代理类中创建原始对象对应的代理对象,建立原始对象和代理对象的第二关联关系。也就是说,计算机设备还可以先在代理类中创建代理对象,再建立原始对象与代理对象的第二关联关系。
例如,通过MonoApi mono_object_get_class可以获取到Mono虚拟机内部对象的描述信息,基于该描述信息,可以在系统启动时创建的第一关联关系中找到任一Mono原始类对应的CLR代理类,然后基于这个CLR代理类创建对应的对象并将其与指定的Mono虚拟机对象关联。
106、计算机设备通过第二虚拟机接收访问请求,该访问请求携带第二虚拟机中的代理类和该代理类中的代理对象。
其中,由于代理类与原始类的对外接口相同,因此,访问请求携带的原始类可以看做是第二虚拟机中的代理类,访问请求中携带的原始对象可以看做是第二虚拟机中的代理对象。
由于访问请求携带第二虚拟机中的代理类和该代理类中的代理对象,因此,通过第二虚拟机接收访问请求,实际上是第二虚拟机根据访问请求访问该第二虚拟机内部的对象。
107、计算机设备根据第一关联关系、第二关联关系和访问请求,对代理类关联的原始类中,与代理对象关联的原始对象进行访问。
第二虚拟机可以根据访问请求,访问该第二虚拟机中的代理类和代理对象,并基于第一关联关系和第二关联关系,确定该代理类和代理对象关联的原始类和原始对象,根据该访问请求对该原始类中的原始对象进行访问。也就是说,直接将访问信息转发到第一虚拟机内部的原始对象上运行。
在一种可能实现方式中,根据第一关联关系、第二关联关系和访问请求,对代理类关联的原始类中,与代理对象关联的原始对象进行访问,包括:将访问请求携带的访问数据转换为第一虚拟机支持的数据格式;根据转换后的访问请求,对原始对象进行访问。
在一种可能实现方式中,如图4所示,根据第一关联关系、第二关联关系和访问请求,对代理类关联的原始类中,与代理对象关联的原始对象进行访问,包括以下至少一项:
(1)通过访问请求访问该原始类中的原始对象,获取第一虚拟机中对应的数据,该访问请求用于获取字段。其中,该原始对象为字段。
如图4所示,当访问请求用于获取字段401时,计算机设备通过代理字段的字段绑定信息,调用第一虚拟机中的接口,获取第一虚拟机中的数据。
例如,上述通过访问请求获取第一虚拟机中对应的数据可以通过mono_field_get_value和mono_field_static_get_value实现。其中,mono_field_get_value用于获取普通字段,mono_field_static_get_value用于获取静态字段。
(2)通过访问请求访问该原始类中的原始对象,更改所述第一虚拟机中对应的字段,所述访问请求用于设置字段。其中,该原始对象为字段。
如图4所示,该访问请求用于设置字段402,计算机设备将第二虚拟机中的数据转换为第一虚拟机支持的数据格式,通过代理字段的字段绑定信息,调用第一虚拟机的接口,将转换后的数据传递给第一虚拟机。
其中,上述通过访问请求更改所述第一虚拟机中对应的字段可以通过使用mono_field_get_value和mono_field_static_get_value实现。其中,
(3)根据访问请求访问该原始类中的原始对象,调用该第一虚拟机中关联的方法,该访问请求用于调用方法或者访问属性。其中,该原始对象为方法或者属性。
例如,如图4所示,该访问请求用于调用方法403,计算机设备确定该方法是否有参数,如果有参数的话,将参数转换为第一虚拟机支持的数据格式,通过方法绑定信息,调用第一虚拟机的接口,来触发第一虚拟机中对应的原始对象的方法调用。
又如,如图4所示,该访问请求用于访问属性404,计算机设备根据该访问请求调用方法,确定该方法是否有参数,如果有参数的话,将参数转换为第一虚拟机支持的数据格式,通过方法绑定信息,调用第一虚拟机的接口,来触发第一虚拟机中对应的原始对象的方法调用。
其中,根据访问请求调用该第一虚拟机中对应的方法,可以包括:根据访问请求,获取该第一虚拟机中对应的属性;或者,设置该第一虚拟机中对应的属性。
其中,获取属性等同于调用该属性对应的Getter方法,设置属性等同于调用该属性对应的Setter方法,调用第一虚拟机中对应的方法可以通过mono_runtime_invoke实现。
需要说明的是,上述步骤106和步骤107仅是对通过代理类访问原始类进行示例性说明,在另一实施例中,还可以是根据第一关联关系和访问请求,对代理类关联的原始类进行访问。在一种可能实现方式中,该根据该第一关联关系和该访问请求,对该代理类关联的原始类进行访问,包括:将该访问请求携带的访问数据转换为该第一虚拟机支持的数据格式;根据转换后的访问请求,对该原始类进行访问。
可选的,根据第一关联关系和访问请求,对代理类关联的原始类进行访问,包括以下至少一项:
(1)通过该访问请求访问该原始类,获取该第一虚拟机中对应的数据,该访问请求用于获取字段。
(2)通过该访问请求访问该原始类,更改该第一虚拟机中对应的字段,该访问请求用于设置字段。
(3)根据该访问请求访问该原始类,调用该第一虚拟机中对应的方法,该访问请求用于调用方法或者访问属性。
108、计算机设备响应于访问原始对象后得到返回值,将该返回值的格式转换为第二虚拟机支持的格式。
如果对第一虚拟机中的原始对象进行访问是有返回值的,则需要将其转换为第二虚拟机可识别的数据,也就是说,将该返回值的格式转换为第二虚拟机支持的格式。
根据返回值的不同,将该返回值的格式转换为第二虚拟机支持的格式可以包括以下处理方式:
(1)该返回值为Void:也就是说,对原始对象进行访问之后没有返回值,此时第二虚拟机端的相关接口的返回值也是Void。
(2)该返回值为内置简单类型,如Boolean、Char、Byte、Int16、UInt16、Int32、UInt32、Int64、UInt64,Enum(枚举)等,计算机设备可以直接将返回值转换为第二虚拟机的对应类型即可。
(3)该返回值为字符串,字符串在第一虚拟机中有自己的文本编码格式,与第二虚拟机使用的文本编码格式不同,因此,需要进行文本编码转换,生产第二虚拟机可用的字符串。
例如,字符串在Mono虚拟机中有自己的文本编码格式,与CLR虚拟机使用的文本编码格式不同,因此需要进行文本编码转换,同时生成CLR可用的String类型的字符串。
(4)该返回值为结构体,系统支持的结构体可以是简单的使用正常字节顺序分布的结构体。此时直接将第一虚拟机内部的结构体内存区提供给第二虚拟机使用,并从该内存区中创建一份结构体。
例如,将Mono虚拟机内部的结构体内存区提供给CLR虚拟机使用,并从此该内存区中创建一份结构体。
109、计算机设备根据第一关联关系,将转换后的返回值下发至第二虚拟机。
计算机设备根据第一关联关系,将转换后的返回值下发至第二虚拟机是指:根据第一关联关系,将转换后的返回值通过代理类的对外接口下发至第二虚拟机中。该方案相当于计算机设备通过代理类的对外接口访问该代理类,并接收该代理类的返回值,而该方案实际上是通过代理类和第一关联关系和第二关联关系,调用原始类中的原始对象,运行该第一虚拟机中的代码,得到返回值,并将返回值下发至第二虚拟机。
本申请实施例提供的对象访问方法可以应用于应用程序开发的场景,图5提供了一种应用程序的显示界面,该显示界面中包括虚拟角色501、操作按键502等多种虚拟对象。图6是一种用于应用程序开发的编辑器的显示界面,在该显示界面中包括地图设置选项601、场景树选项602和属性设置选项603,在该显示界面中进行操作,可以对应用程序的场景、玩法等进行编辑。由于该编辑器采用Mono虚拟机,因此,若运行于.NET框架中时,可以采用本申请实施例提供的方案。
本申请实施例提供的对象访问方法,通过获取第一虚拟机中的原始类与第二虚拟机中的代理类的第一关联关系,通过第二虚拟机接收访问请求,该访问请求携带第二虚拟机中的代理类,根据第一关联关系和访问请求,对代理类关联的原始类进行访问。通过原始类与代理类之间的关联关系,可以通过访问代理类来访问该原始类,实现了同时运行第一虚拟机和第二虚拟机,并通过代理类与原始类的关联关系,使得第二虚拟机与第一虚拟机可以进行交互,并且该种交互方式,交互成本低,易于应用到各种场景中。
图7是本申请实施例提供的一种虚拟对象控制装置的结构示意图,如图7所示,该装置包括:
获取模块701,用于获取第一虚拟机中的原始类与第二虚拟机中的代理类的第一关联关系;
接收模块702,用于通过第二虚拟机接收访问请求,访问请求携带第二虚拟机中的代理类;
访问模块703,用于根据第一关联关系和该访问请求,对代理类关联的原始类进行访问。
本申请实施例提供的对象访问装置,通过获取第一虚拟机中的原始类与第二虚拟机中的代理类的第一关联关系,通过第二虚拟机接收访问请求,该访问请求携带第二虚拟机中的代理类,根据第一关联关系和访问请求,对代理类关联的原始类进行访问。通过原始类与代理类之间的关联关系,可以通过访问代理类来访问该原始类,实现了同时运行第一虚拟机和第二虚拟机,并通过代理类与原始类的关联关系,使得第二虚拟机与第一虚拟机可以进行交互,并且该种交互方式,交互成本低,易于应用到各种场景中。
如图8所示,在一种可能实现方式中,该获取模块701,包括:
获取单元7011,用于获取第一虚拟机的第一程序集和第二虚拟机的第二程序集,该第一程序集中包括至少一个原始类,该第二程序集包括至少一个代理类;
确定单元7012,用于确定该第一虚拟机中与该第二虚拟机中的代理类对应的原始类;
建立单元7013,用于建立该原始类与对应的代理类的第一关联关系。
在一种可能实现方式中,该确定单元7012,用于根据所述第二虚拟机中任一代理类中的绑定信息,确定所述任一代理类对应的原始类。
在一种可能实现方式中,该确定单元7012,用于执行以下至少一项:
响应于该第二程序集中任一代理类的接口与该第一程序集中任一原始类的接口相同,确定该任一原始类为该任一代理类对应的原始类;
响应于该第二程序集中任一代理类的类名称与该第一程序集中任一原始类的类名称相同,确定该任一原始类为该任一代理类对应的原始类;
响应于该第二程序集中任一代理类的命名空间与该第一程序集中任一原始类的命名空间相同,确定该任一原始类为该任一代理类对应的原始类。
在一种可能实现方式中,该建立单元7013,还用于将该原始类的描述信息添加至该代理类中,该描述信息用于确定该原始类的地址。
在一种可能实现方式中,该建立单元7013,还用于建立该原始对象和该代理对象的第二关联关系。
在一种可能实现方式中,该建立单元7013,还用于响应于任一对象为该原始类中的原始对象,在该原始类关联的代理类中创建该原始对象对应的代理对象,建立该原始对象和该代理对象的第二关联关系。
在一种可能实现方式中,该原始类包括字段、方法、属性中的至少一种对象,该建立单元7013,还用于执行以下至少一项:
确定该代理类中与该原始类中的原始字段对应的代理字段,建立该原始字段与该代理字段的第二关联关系;
确定该代理类中与该原始类中的原始方法对应的代理方法,建立该原始方法与该代理方法的第二关联关系;
确定该代理类中与该原始类中的原始属性对应的代理属性,建立该原始属性与该代理属性的第二关联关系。
在一种可能实现方式中,该访问请求携带该代理类中的代理对象;该访问模块703,包括:
获取单元7031,用于获取该原始类中的原始对象与该代理类中的代理对象的第二关联关系;
访问单元7032,用于根据该第一关联关系、该第二关联关系和该访问请求,对该代理类关联的原始类中,与该代理对象关联的原始对象进行访问。
在一种可能实现方式中,该访问单元7032,用于执行以下至少一项:
通过该访问请求访问该原始类,获取该第一虚拟机中对应的数据,该访问请求用于获取字段;
通过该访问请求访问该原始类,更改该第一虚拟机中对应的字段,该访问请求用于设置字段;
根据该访问请求访问该原始类,调用该第一虚拟机中对应的方法,该访问请求用于调用方法或者访问属性。
在一种可能实现方式中,该访问模块703,包括:
转换单元7033,用于将该访问请求携带的访问数据转换为该第一虚拟机支持的数据格式;
访问单元7032,用于根据转换后的访问请求,对该原始类进行访问。
在一种可能实现方式中,该装置还包括:
转换模块704,用于响应于访问该原始类后得到返回值,将该返回值的格式转换为该第二虚拟机支持的格式;
下发模块705,用于根据该第一关联关系,将转换后的返回值下发至该第二虚拟机。
在一种可能实现方式中,该获取单元7031,用于获取该第一程序集,确定该第一程序集中的每个原始类;生成该每个原始类在该第二虚拟机中对应的代理类;根据每个代理类,生成该第二程序集。
在一种可能实现方式中,该获取单元7031,用于根据该原始类的描述信息,生成该每个原始类对应的代理类,该代理类的接口与对应的原始类的接口相同。
在一种可能实现方式中,该代理类包括绑定信息,该获取单元7031,用于根据每个原始类的描述信息,生成该每个原始类的绑定信息。
图9是本申请实施例提供的一种终端的结构示意图,可以实现上述实施例中第一终端、第二终端及第三终端执行的操作。该终端900可以是便携式移动终端,比如:智能手机、平板电脑、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑、台式电脑、头戴式设备、智能电视、智能音箱、智能遥控器、智能话筒,或其他任意智能终端。终端900还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端900包括有:处理器901和存储器902。
处理器901可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。存储器902可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的,用于存储至少一个指令,该至少一个指令用于被处理器901所具有以实现本申请中方法实施例提供的对象访问方法。
在一些实施例中,终端900还可选包括有:外围设备接口903和至少一个外围设备。处理器901、存储器902和外围设备接口903之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口903相连。具体地,外围设备包括:射频电路904、显示屏905和音频电路906中的至少一种。
射频电路904用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路904通过电磁信号与通信网络以及其他通信设备进行通信。
显示屏905用于显示UI(UserInterface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。该显示屏905可以是触摸显示屏,还可以用于提供虚拟按钮和/或虚拟键盘。
音频电路906可以包括麦克风和扬声器。麦克风用于采集用户及环境的音频信号,并将音频信号转换为电信号输入至处理器901进行处理,或者输入至射频电路904以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端900的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器901或射频电路904的电信号转换为音频信号。
本领域技术人员可以理解,图9中示出的结构并不构成对终端900的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
图10是本申请实施例提供的一种服务器的结构示意图,该服务器1000可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(Central ProcessingUnits,CPU)1001和一个或一个以上的存储器1002,其中,存储器1002中存储有至少一条指令,至少一条指令由处理器1001加载并执行以实现上述各个方法实施例提供的方法。当然,该服务器还可以具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该服务器还可以包括其他用于实现设备功能的部件,在此不做赘述。
服务器1000可以用于执行上述对象访问方法。
本申请实施例还提供了一种计算机设备,该计算机设备包括处理器和存储器,存储器中存储有至少一条程序代码,至少一条程序代码由处理器加载并具有以实现上述实施例的对象访问方法。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有至少一条程序代码,至少一条程序代码由处理器加载并具有以实现上述实施例的对象访问方法。
本申请实施例还提供了一种计算机程序,该计算机程序中存储有至少一条程序代码,该至少一条程序代码由处理器加载并执行,以实现上述实施例的对象访问方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请实施例的可选实施例,并不用以限制本申请实施例,凡在本申请实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (18)

1.一种对象访问方法,其特征在于,所述方法包括:
获取第一虚拟机中的原始类与第二虚拟机中的代理类的第一关联关系;
通过所述第二虚拟机接收访问请求,所述访问请求携带所述第二虚拟机中的代理类;
根据所述第一关联关系和所述访问请求,对所述代理类关联的原始类进行访问。
2.根据权利要求1所述的方法,其特征在于,所述获取第一虚拟机中的原始类与第二虚拟机中的代理类的第一关联关系,包括:
获取所述第一虚拟机的第一程序集和所述第二虚拟机的第二程序集,所述第一程序集中包括至少一个原始类,所述第二程序集包括至少一个代理类;
确定所述第一虚拟机中与所述第二虚拟机中的代理类对应的原始类;
建立所述原始类与对应的代理类的第一关联关系。
3.根据权利要求2所述的方法,其特征在于,所述确定所述第一虚拟机中与所述第二虚拟机中的代理类对应的原始类,包括:
根据所述第二虚拟机中任一代理类中的绑定信息,确定所述任一代理类对应的原始类。
4.根据权利要求2所述的方法,其特征在于,所述确定所述第一虚拟机中与所述第二虚拟机中的代理类对应的原始类,包括以下至少一项:
响应于所述第二程序集中任一代理类的接口与所述第一程序集中任一原始类的接口相同,确定所述任一原始类为所述任一代理类对应的原始类;
响应于所述第二程序集中任一代理类的类名称与所述第一程序集中任一原始类的类名称相同,确定所述任一原始类为所述任一代理类对应的原始类;
响应于所述第二程序集中任一代理类的命名空间与所述第二程序集中任一原始类的命名空间相同,确定所述任一原始类为所述任一代理类对应的原始类。
5.根据权利要求2所述的方法,其特征在于,所述建立所述原始类与对应的代理类的第一关联关系,包括:
将所述原始类的描述信息添加至所述代理类中,所述描述信息用于确定所述原始类的地址。
6.根据权利要求2所述的方法,其特征在于,所述建立所述原始类与对应的代理类的第一关联关系之后,所述方法还包括:
建立所述原始类中的原始对象和所述代理类中与所述原始对象对应的代理对象的第二关联关系。
7.根据权利要求6所述的方法,其特征在于,所述建立所述原始类中的原始对象和所述代理类中与所述原始对象对应的代理对象的第二关联关系,包括:
响应于任一对象为所述原始类中的原始对象,在所述原始类关联的代理类中创建所述原始对象对应的代理对象,建立所述原始对象和所述代理对象的第二关联关系。
8.根据权利要求6所述的方法,其特征在于,所述原始类包括字段、方法、属性中的至少一种对象,所述建立所述原始类中的原始对象和所述代理类中与所述原始对象对应的代理对象的第二关联关系,包括以下至少一项:
确定所述代理类中与所述原始类中的原始字段对应的代理字段,建立所述原始字段与所述代理字段的第二关联关系;
确定所述代理类中与所述原始类中的原始方法对应的代理方法,建立所述原始方法与所述代理方法的第二关联关系;
确定所述代理类中与所述原始类中的原始属性对应的代理属性,建立所述原始属性与所述代理属性的第二关联关系。
9.根据权利要求1所述的方法,其特征在于,所述访问请求携带所述代理类中的代理对象;所述根据所述第一关联关系和所述访问请求,对所述代理类关联的原始类进行访问,包括:
获取所述原始类中的原始对象与所述代理类中的代理对象的第二关联关系;
根据所述第一关联关系、所述第二关联关系和所述访问请求,对所述代理类关联的原始类中,与所述代理对象关联的原始对象进行访问。
10.根据权利要求9所述的方法,其特征在于,所述根据所述第一关联关系、所述第二关联关系和所述访问请求,对所述代理类关联的原始类中,与所述代理对象关联的原始对象进行访问,包括以下至少一项:
通过所述访问请求访问所述原始类,获取所述第一虚拟机中对应的数据,所述访问请求用于获取字段;
通过所述访问请求访问所述原始类,更改所述第一虚拟机中对应的字段,所述访问请求用于设置字段;
根据所述访问请求访问所述原始类,调用所述第一虚拟机中对应的方法,所述访问请求用于调用方法或者访问属性。
11.根据权利要求1所述的方法,其特征在于,所述根据所述第一关联关系和所述访问请求,对所述代理类关联的原始类进行访问,包括:
将所述访问请求携带的访问数据转换为所述第一虚拟机支持的数据格式;
根据转换后的访问请求,对所述原始类进行访问。
12.根据权利要求1所述的方法,其特征在于,所述根据所述第一关联关系和所述访问请求,对所述代理类关联的原始类进行访问之后,所述方法还包括:
响应于访问所述原始类后得到返回值,将所述返回值的格式转换为所述第二虚拟机支持的格式;
根据所述第一关联关系,将转换后的返回值下发至所述第二虚拟机。
13.根据权利要求2所述的方法,其特征在于,所述获取所述第一虚拟机的第一程序集和所述第二虚拟机的第二程序集,包括:
获取所述第一程序集,确定所述第一程序集中的每个原始类;
生成所述每个原始类在所述第二虚拟机中对应的代理类;
根据每个代理类,生成所述第二程序集。
14.根据权利要求13所述的方法,其特征在于,所述生成所述每个原始类在所述第二虚拟机中对应的代理类,包括:
根据所述原始类的描述信息,生成所述每个原始类对应的代理类,所述代理类的接口与对应的原始类的接口相同。
15.根据权利要求13所述的方法,其特征在于,所述代理类包括绑定信息,所述生成所述每个原始类在所述第二虚拟机中对应的代理类,包括:
根据所述每个原始类的描述信息,生成所述每个原始类的绑定信息。
16.一种对象访问装置,其特征在于,所述装置包括:
获取模块,用于获取第一虚拟机中的原始类与第二虚拟机中的代理类的第一关联关系;
接收模块,用于通过所述第二虚拟机接收访问请求,所述访问请求携带所述第二虚拟机中的代理类;
访问模块,用于根据所述第一关联关系和所述访问请求,对所述代理类关联的原始类进行访问。
17.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条程序代码,所述至少一条程序代码由所述处理器加载并执行,以实现如权利要求1至15任一权利要求所述的对象访问方法。
18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有至少一条程序代码,所述至少一条程序代码由处理器加载并执行,以实现如权利要求1至15任一权利要求所述的对象访问方法。
CN202010091143.3A 2020-02-13 2020-02-13 对象访问方法、装置、设备及存储介质 Pending CN111290746A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010091143.3A CN111290746A (zh) 2020-02-13 2020-02-13 对象访问方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010091143.3A CN111290746A (zh) 2020-02-13 2020-02-13 对象访问方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN111290746A true CN111290746A (zh) 2020-06-16

Family

ID=71028490

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010091143.3A Pending CN111290746A (zh) 2020-02-13 2020-02-13 对象访问方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN111290746A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113312120A (zh) * 2021-06-17 2021-08-27 武汉斗鱼鱼乐网络科技有限公司 在虚拟机中执行c++任务的方法、装置、电子设备及介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030070006A1 (en) * 2001-10-10 2003-04-10 Borland Software Corporation Development system providing extensible remoting architecture
CN103677975A (zh) * 2013-12-09 2014-03-26 北京恒华伟业科技股份有限公司 一种访问应用系统内部对象的系统和方法
CN104601428A (zh) * 2014-12-23 2015-05-06 广州亦云信息技术有限公司 虚拟机之间的通信方法
CN106778296A (zh) * 2016-11-30 2017-05-31 广东欧珀移动通信有限公司 一种访问对象的访问方法、装置及终端
CN107453971A (zh) * 2016-05-30 2017-12-08 北京京东尚科信息技术有限公司 一种多个虚拟机之间的通信方法及系统
CN108427677A (zh) * 2017-02-13 2018-08-21 阿里巴巴集团控股有限公司 一种对象访问方法、装置及电子设备
CN109254764A (zh) * 2018-09-28 2019-01-22 福州大学 面向客户端应用程序的获取运行时软件体系结构的方法
CN109740310A (zh) * 2018-12-29 2019-05-10 北京嘉楠捷思信息技术有限公司 用于嵌入式操作系统的内核对象访问方法和装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030070006A1 (en) * 2001-10-10 2003-04-10 Borland Software Corporation Development system providing extensible remoting architecture
CN103677975A (zh) * 2013-12-09 2014-03-26 北京恒华伟业科技股份有限公司 一种访问应用系统内部对象的系统和方法
CN104601428A (zh) * 2014-12-23 2015-05-06 广州亦云信息技术有限公司 虚拟机之间的通信方法
CN107453971A (zh) * 2016-05-30 2017-12-08 北京京东尚科信息技术有限公司 一种多个虚拟机之间的通信方法及系统
CN106778296A (zh) * 2016-11-30 2017-05-31 广东欧珀移动通信有限公司 一种访问对象的访问方法、装置及终端
CN108427677A (zh) * 2017-02-13 2018-08-21 阿里巴巴集团控股有限公司 一种对象访问方法、装置及电子设备
CN109254764A (zh) * 2018-09-28 2019-01-22 福州大学 面向客户端应用程序的获取运行时软件体系结构的方法
CN109740310A (zh) * 2018-12-29 2019-05-10 北京嘉楠捷思信息技术有限公司 用于嵌入式操作系统的内核对象访问方法和装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113312120A (zh) * 2021-06-17 2021-08-27 武汉斗鱼鱼乐网络科技有限公司 在虚拟机中执行c++任务的方法、装置、电子设备及介质
CN113312120B (zh) * 2021-06-17 2022-05-10 武汉斗鱼鱼乐网络科技有限公司 在虚拟机中执行c++任务的方法、装置、电子设备及介质

Similar Documents

Publication Publication Date Title
US7337436B2 (en) System and method for cross platform and configuration build system
WO2022199111A1 (zh) 应用程序中功能的实现方法、装置、电子设备和存储介质
KR101807897B1 (ko) 크로스―플랫폼 어플리케이션 프레임워크
CN111506291B (zh) 音频数据采集方法、装置、计算机设备及存储介质
CN111740948B (zh) 数据包发布方法、动态更新方法、装置、设备及介质
KR20140065837A (ko) 소프트웨어 가상화를 이용하여 소프트웨어 서비스를 제공하기 위한 장치, 시스템 및 그 방법
MX2015002906A (es) Generacion de codigo nativo a partir de un codigo de lenguaje intermediario para una aplicacion.
KR20140067018A (ko) 메타데이터를 이용하여 운영 체제의 네이티브 애플리케이션 프로그래밍 인터페이스를 기술하는 기법
EP4119207A1 (en) Vibration control method and apparatus, and electronic device and computer-readable storage medium
CN113688186B (zh) 智能合约执行方法、引擎及区块链节点
KR20050010851A (ko) 휴대용 장치에서 멀티미디어 렌더링하는 시스템
EP1445694A2 (en) Modularization for J2ME platform implementation
CN111290746A (zh) 对象访问方法、装置、设备及存储介质
CN114625439A (zh) 基于微前端架构的子应用运行方法、电子设备及存储介质
CN112988175A (zh) 跨平台应用安装包的生成方法、装置、介质及电子设备
CN110399040B (zh) 多模态交互方法、用户端设备、服务器及系统
CN111488286A (zh) 一种Android模块独立开发的方法及装置
CN117827317A (zh) 一种面向risc-v多指令集组合的二进制格式支持的方法和装置
WO2022078057A1 (zh) 应用包发布方法、应用方法、装置、介质、服务器及设备
KR20090122703A (ko) 변환 프로그램 제공 서버 및 방법
CN111782196A (zh) 基于mvp架构的开发方法及装置
CN117724726B (zh) 一种数据处理方法和相关装置
EP4216052A1 (en) Method for developing mvvm architecture-based application, and terminal
Hu et al. An empirical study of mobile/handheld app development using android platforms
CN116991380B (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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40024095

Country of ref document: HK