混合语言混合类

基于starcore平台,支持lua/python/c++无缝混合编程和调用

用lua定义一个实体类,python扩展该类,然后采用C++进行调用

 

1.用lua定义实体类TestObjectClass,文件test_dyna1.lua,如下:

require "libstarcore"

Service=libstarcore._InitSimple("RemoteCallServer","123",0,0)
SrvItem = Service:_CreateSysRootItemEx("TestItem","")

a = Service:_NewGlobal(SrvItem,"TestObjectClass")
function a:Lua_Add( x, y )
    return x+y
end

 

2.用python扩展该类TestObjectPythonClass,文件:test_dyna1.py

import sys
import os
if sys.platform == "win32" :
   sys.path.append(os.getenv('windir')+"//system32")
else :
   sys.path.append("/usr/lib")
import starpy

Service = SrvGroup=starpy._InitSimple("RemoteCallServerPython", "123",0,0,"test_dyna1.lua")
SrvItem = Service._CreateSysRootItemEx("TestItem","")

a = Service.TestObjectClass._NewGlobal(SrvItem,"TestObjectPythonClass")
def a_Python_Add( self, x,y  ) : 
    return x+y
a.Python_Add = a_Python_Add

 

3.用C++进行调用

#include "vsopenapi.h"

int main(int argc, char* argv[])
{
 VS_CORESIMPLECONTEXT Context;
 class ClassOfSRPInterface *SRPInterface;
 void *Object;

 

//初始化

 SRPInterface = VSCore_InitSimple(&Context,"test","123",0,0,NULL,0,"test_dyna1.py?script=python",NULL);

//创建类TestObjectPythonClass的实例
 Object = SRPInterface ->MallocObject(NULL,0,SRPInterface ->GetIDEx(SRPInterface ->GetObjectEx(NULL,"TestObjectPythonClass")),0,NULL);

//调用lua函数

 SRPInterface ->LuaPushNumber(123);
 SRPInterface ->LuaPushNumber(234);
 SRPInterface ->ExecNameScript(Object,"Lua_Add",2,1);
 printf("Lua_Add = %f/n",SRPInterface ->LuaToNumber(-1));
 SRPInterface ->LuaPop(1);

//调用python中定义的函数

 SRPInterface ->LuaPushNumber(567);
 SRPInterface ->LuaPushNumber(789);
 SRPInterface ->ExecNameScript(Object,"Python_Add",2,1);
 printf("Python_Add = %f/n",SRPInterface ->LuaToNumber(-1));
 SRPInterface ->LuaPop(1);

 

 SRPInterface -> Release();
 VSCore_TermSimple(&Context);
 return 0;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值