我正在C++中实现lua (5.1),遇到了问题,无法将lua函数作为从lua调用的c++函数的参数传递。示例(从C++调用Main函数):
卢阿:
function Main()
HookEntityFunction("player", 1, PlayerSpawn); -- << is this normal?
end
function PlayerSpawn()
end
C++:
int HookEntityFunction(lua_State *L)
{
lua_CFunction F = lua_tocfunction(L, 3); -
让我们在“luafunc.lua”中有一个代码:
function foo(a, b)
return a + b
end
a = io.read('*n')
b = io.read('*n')
print (foo(a, b))
让我们尝试使用C++文件中的function:
#include <iostream>
using namespace std;
extern "C"{
#include <lua.h>
#include <lualib.h>
#include &l
我正在将Lua嵌入到C/C++应用程序中。有没有办法在不执行整个脚本的情况下从C/C++调用Lua函数?
我试过这样做:
//call lua script from C/C++ program
luaL_loadfile(L,"hello.lua");
//call lua function from C/C++ program
lua_getglobal(L,"bar");
lua_call(L,0,0);
但它给了我这个:
PANIC: unprotected error in call to Lua API (attempt to call a nil
简单地说,测试程序在C++端创建一个协同线,使用Lua-side函数启动它,并使用一些日志多次恢复。在第一次调用resume时,它突然崩溃,开始运行coroutine,违反了对无效堆内存(0xfdfdfd)的访问权限。
以下是整个代码:
#include <juce_core/juce_core.h>
#include <lauxlib.h>
int debug_log( lua_State* lua )
{
int narg = lua_gettop( lua );
juce::StringArray tokens;
for ( int i
我想知道在C++代码中与lua /O交互的最佳方式。 lua脚本: while true do
local input = io.read("*line")
if input == "hello" then
print("world")
else
print("hmmm...")
end
end C++代码: lua_State* L = luaL_newstate();
luaL_openlibs(L);
int r = luaL_dofile(L, "f
我对C++中的默认构造函数有一个问题。这是一件简单的事情,但看不出有什么问题。
我有一个带有3个可选参数的构造函数,在初始化列表中有常量值:
data::data(int D = 1, int M = 1, int Y = 1583) : Day(D), Month(M), Year(Y)
{
if (!CorrectDate()) throw "Wrong Date!";
}
为什么我可以用一个、两个或三个参数调用它,它工作得很好,但当我不用参数调用它时就不行了?
data tommorrow();
我想在c++中调用lua函数debug.traceback()来获取c++中的trackback信息,所以我在c++中添加了如下函数:
int luaErrorHandler(lua_State *m_state) {
if (!lua_isstring(m_state, 1))
return 1;
lua_getfield(m_state, LUA_GLOBALSINDEX, "debug");
if (!lua_istable(m_state, -1)) {
lua_pop(m_state, 1);
r
我想做这样的事情:
Create object in Lua将此对象传递给C++,在此对象上执行一些从C++传递该对象的方法
现在我在卢阿有了这个
Account = {balance = 0}
function Account.Create(name)
local a = Account:new(nil, name);
return a;
end
function Account:new (o, name)
o = o or {name=name}
setmetatable(o, self)
self.__index = self
return o
en
我从c++脚本调用lua函数。在lua函数中,我需要根据从C++传递给函数的数据更新某些变量和表。数据必须在一个连续循环中传递给lua函数,每次对lua变量和表的后续更新都必须考虑到以前更新所做的更改。如何以强有力的方式完成这一任务?一种笨拙的方法可能只是在C和lua之间传递值,或者反复保存和加载它们,但是由于我的数据表预计会非常大,所以这可能不是一个好的选择。请提出解决办法。
PS:我不能简单地用lua编写整个代码,因为C++代码的目的是运行rosservices并订阅rostopics。我认为很难在lua实现同样的目标,虽然有一个叫做roslua的软件包,但显然它与ros不兼容。
fun
首先,我为我的英语感到抱歉。
我的问题是如何在lua_call函数中多次使用C++。我有一个使用lua作为主要语言的程序,但是它接受c++插件来添加功能。我想从c++调用LUA函数,并在LUA中调用该c++函数。我想在工作过程中编写一个带有进度的c++函数,然后将这个过程传递给一个LUA函数,该函数负责向用户显示进度。
目前,我在LUA中有一个测试函数:
function ShowText(text)
Dialog.Message("Hi", text);
return true;
end
和一个c++函数:
static int Test(lua_State
我对Lua完全陌生。据我所知,可以将Lua变量和方法绑定到C/C++方面的变量和方法。
但是,是否有可能将用户类型变量绑定到C/C++函数的调用,该函数看起来可能与Lua侧的属性类似?
示例:
// C++
struct player {
int get_value(const std::string& property) const {
auto it = values.find(name);
if (it != values.end()) {
return it->second;
}
return -1;
}
st
我期待着使用像"asdf“这样的变量,而不是编写name函数来检查它的返回(它有时会改变)。这就是为什么每次我们使用(调用) "asdf“变量都应该更新它的值
请问在Lua有什么方法可以做到这一点吗?
asdf == getFunction() --we define it here
(...) --some code
if asdf < 10 then ... --here we call the variable (so it should get/update again the result of getFunction())
我不知道是否适合在这里提出这项质询,但我会尽量清楚解释我的质询。
我有一台机器要控制。基本的操作功能(如移动、开门、等待命令等)、界面等都是用C++编写的,我们需要用lua编写一些服务脚本。业务脚本的伪代码如下:
* define the service name and give some description
* declare the task address
* declare the input and output class name
* list the input plugin files
* define a "run" function
我正在使用Lua编写C++并将它们嵌入到C++中。我在这个过程中使用了LuaBridge。
在我的Lua脚本中,我有一些变量,这些变量首先需要检索以便在C++、中使用,此外,我还有一个非常简单的函数:
run = function()
print ("state is on!")
end
但是,这个函数只在特定条件下调用()。也就是说,只有在经过一系列复杂的计算后才从C++代码中获得"true“时才调用。
受Lua和LuaBridge知识的限制,我所知道的是:在我做完之后
loadscript(L, "script.lua")
lua_pcall
在Lua中,似乎已经知道了对数字/布尔/lightuserdata的引用。但是,在Lua中设置指向C++本机类型(例如浮点)并在我更改Lua中相应的全局时自动更新它的全局值的最简单方法是什么?
int foo = 2;
//imaginary lua function that does what I want
lua_pushnumberpointer(state,&foo)
lua_setglobal(state,"foo")
-- later, in a lua script
foo = 5;
最后一行应该自动更新C++端的foo。实现这样的目标最简单的方法是什