mre应用和Native的交互之增加mre sdk接口

经常碰到mre sdk功能不够完善的情况,没有实现功能的API,这个时候怎么办呢?在mtk 的Native端(也就是CodeBase里)增加接口,扩展到mre的sdk中。下面是扩展mtk Mre sdk接口的具体步骤。现在以vm_extra_add(int a, int b),这个接口为例,扩展这个接口,将接口定义在native端,然后再mre应用中调用之。类似的,如果要将mtk native端其他的函数扩展到mre应用中调用,都类似的可参考。

1、增加接口,找到native端 mre\engine\framework下的Vmpromng.c,在里面增加如下函数


VMINT vm_extra_add(VMINT a, VMINT b)
{
	return a + b;
}

2、native端扩展接口,找到Vmpromng.c中的VMINT vm_get_sym_entry(char* symbol)函数,其实很多mre的接口都在这里扩展,可以看到类似下面的代码

   
    if(strcmp(symbol,"vm_pn_is_support") == 0)
        return (VMINT)vm_pn_is_support;
    if(strcmp(symbol,"vm_pn_get_global_setting") == 0)
        return (VMINT)vm_pn_get_global_setting;
    if(strcmp(symbol,"vm_pn_reg") == 0)
        return (VMINT)vm_pn_reg;
    if(strcmp(symbol,"vm_pn_dereg") == 0)
        return (VMINT)vm_pn_dereg;

这其实就是扩展接口,根据symbol的值,返回不同接口的地址,现在要增加vm_extra_add接口,则增加如下line 5-6代码,remake一下。

   
    if(strcmp(symbol,"vm_pn_is_support") == 0)
        return (VMINT)vm_pn_is_support;
    if(strcmp(symbol,"vm_pn_get_global_setting") == 0)
        return (VMINT)vm_pn_get_global_setting;
    if(strcmp(symbol, "vm_extra_add") == 0)
        return (VMINT)vm_extra_add;
    if(strcmp(symbol,"vm_pn_reg") == 0)
        return (VMINT)vm_pn_reg;
    if(strcmp(symbol,"vm_pn_dereg") == 0)
        return (VMINT)vm_pn_dereg;
3、在mre应用中使用新增加的vm_extra_add接口,以下是mre2.0的使用新增接口的使用,只需保证MRE_ENTRY("vm_extra_add");中的红色字体和if(strcmp(symbol, "vm_extra_add") == 0)中红色字体一致即可获取出函数地址。

#include "vmsm.h"

typedef VMINT (*VmExtraAdd)(VMINT a, VMINT b);

void vm_extra_add_test()
{
	VmExtraAdd* vm_extra_add = NULL;
	int a = 1, b = 2, c;
	
	vm_extra_add = (VmExtraAdd)MRE_ENTRY("vm_extra_add");
	if(NULL != vm_extra_add)
	{
		c = vm_extra_add(a, b);
	}
}
当然Mre 1.0的使用接口方法会有点不同,看下面的代码


#include "vmsm.h"

typedef VMINT (*VmExtraAdd)(VMINT a, VMINT b);
extern vm_get_sym_entry_t vm_get_sym_entry;

void vm_extra_add_test()
{
	VmExtraAdd* vm_extra_add = NULL;
	int a = 1, b = 2, c;
	
	vm_extra_add = (VmExtraAdd)vm_get_sym_entry("vm_extra_add");
	if(NULL != vm_extra_add)
	{
		c = vm_extra_add(a, b);
	}
}


你可能感兴趣的:(mre应用和Native的交互之增加mre sdk接口)