作用,实现,参数讲解。
script-function标签
作用
问题:如何在插件的接口中调用lua脚本中定义的函数?
用于声明一个函数,这个函数的作用是通过v-rep提供的接口sim::callScriptFunctionEx()调用脚本的函数,并且返回函数执行结果。
script-funciton声明的函数在哪被调用
只要设置好需要的输入参数,可以在插件的任意合理位置调用。
function内部在c++中实现
就是实现脚本函数的调用,并且获取返回值。
创建栈帧的作用:
传递函数的参数和返回值。
将脚本函数需要的参数传入栈帧,脚本函数执行时从栈帧获取输入的参数;
脚本函数执行完成后将返回值写入栈帧,调用者可以从栈帧中获取返回值。
怎么样传递脚本函数需要的参数
通过script-function声明的函数的in参数;
scriptId要怎么获取
所有的插件接口的in参数都会有一个SScriptCallBack类型的”_“成员,这个成员中就有可以直接从这个
怎么样获取脚本函数返回的值
eg:
<script-function name="testCallback">
...
</script-function>
因为调用testCallback函数之前,我们是需要先创建in和out变量的,所以testCallback函数返回之后,如果执行的脚本函数有返回值,只需要从out中获取即可。
sim::callScriptFunctionEx
这个是v-rep提供的调用脚本函数的接口。
参数解析
-
scriptHandle:
需要调用的脚本函数所在的lua脚本的脚本句柄。
也就是说第二个参数(脚本函数名),必须要在scriptId标识的lua脚本文件中。
-
functionName:
被调用的脚本函数名。
-
stackId:
这个参数是一个栈帧的id,这个栈用来存放传递脚本函数需要的参数和脚本函数执行返回的值。
这个参数以及栈我们不用自己传递,script-funciton生成的函数会自己生成完成传递。
官网函数说明
函数链接
其实xml中使用script-function标签,最重要的就是要实现一个c++函数,内部通过调用sim::callScriptFunctionEx这个接口调用lua语言脚本(这里只讲lua这种脚本)函数,并执行脚本函数,返回脚本函数执行的返回值。
案例
插件:
simTest
simTest.lua脚本文件:
因为加载这个simTest插件时,执行的是simTest.lua脚本,我们需要调用的脚本函数也要在这个文件里.
lua:
local simTest = loadPlugin 'simTest';
function testScriptFunc(str)print("You call script function successfully ,str="..str)m_str="This is return from script function"return m_str
end
(require 'simTest-typecheck')(simTest)
return simTest
xml:
<command name="testCallback"><params><param name="call_str" type="string" /></params><return><param name="ret" type="string" /></return></command><script-function name="callScriptFunc"><params><param name="script_str" type="string" /></params><return><param name="ret" type="string" /></return></script-function>
pugin.cpp
void testCallback(testCallback_in *in,testCallback_out *out){callScriptFunc_in in_args;callScriptFunc_out out_args;in_args.script_str=in->call_str;if(callScriptFunc(in->_.scriptID,"testScriptFunc",&in_args,&out_args)) out->ret=out_args.ret;}
v-rep调用结果: