混合语言混合类

来源:互联网 发布:什么软件洗车便宜 编辑:程序博客网 时间:2024/04/29 20:53

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