基于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;
}