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);
	}
}


转载于:https://www.cnblogs.com/WIT-Evan/archive/2012/07/19/7291487.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值