我在C/++中有一个LUA回调,我正在尝试使用lua_gettop()来检测一个可选的第一个参数。问题是lua_gettop(L) == 1总是正确的,即使我在LUA中没有提供任何参数。 下面是我用C/++编写的回调函数的基础知识: int LuaFile::l_cpp_my_callback(lua_State *L) {
LuaFilePtr my_this = lua_map_[L];
if ( lua_gettop(L) == 0 ) {
// I never get here
} else if(lua_gettop(L) == 1) {
我试图在ip地址127.0.0.1:48550向本地计算机上的vlc播放器发送一个mp4,但遇到了这个错误。
Failed to update header with correct duration.
Failed to update header with correct filesize.
在我的mac上播放时,我没有这个问题,但是我在Windows pc上遇到了这个问题。
在我的mac上,我运行的是ffmpeg 3.2.4,在pc上,ffmpeg版本N-86755-g0780ad9是用gcc 7.1.0构建的。
下面是VLC媒体播放器调试日志:
core debug: adding i
我不明白如何使用CMake (3.11)在Windows上使用VS 2017定位Lua5.3.4的动态版本。我将CMAKE_PREFIX_PATH设置为指向具有include\lua.h和lib\lua53.dll的目录。这些是CMakeLists.txt中的相关行
if(NOT DEFINED LUA_INCLUDE_DIR OR NOT DEFINED LUA_LIBRARIES)
find_package(lua REQUIRED)
endif()
include_directories(${LUA_INCLUDE_DIR})
target_link_libraries(${PR
我昨天胡乱摆弄Lua,偶然发现了'newproxy‘函数。
我有点理解它,但我不确定它有什么用处。我知道它会创建一个附加了元表的空userdata对象(如果参数为true)。
它的新代理有什么用?下面是我在摆弄它时所做的一个例子:
local proxy = newproxy(true)
local metatable = getmetatable(proxy)
metatable.__index = function(array, key) print(array, key) end
local y = proxy[100]
--[[
OUTPUT:
我在Lua中有一个在表上操作的函数,它反复向表中添加条目:
function DoStuff()
local table = {};
for i = 1, 1000 do
local name, value = GetSomething(i);
if (CheckSomething(name, value))
table[name] = value
end;
end;
end;
我知道这是快速的;Lua有一个很好的哈希表算法。但是现在我需要将我的部分功能分开,这样我就可以对它进行单元测试:
fun
从Pandoc2.0版本开始,就有了编写的能力。但是,在Pandoc2.0中,我发现在元素表上使用Lua的pairs并不能显示表中的所有键。
下面是一个很小的例子来说明这一点。在filter.lua中,我有:
function Para(elem)
io.stderr:write("A: " .. type(elem) .. "\n")
for k, v in pairs(elem) do
io.stderr:write("B: " .. k .. "\n")
end
io.stderr:write(
使用C++,lua5.1,luabind 0.7
Lua代码:
-- allocates near 8Mb of memory
function fff()
local t = {}
for i = 1, 300000 do
table.insert(t, i)
end
return t
end
C++代码:
{
luaL_dostring(lua_state, "return fff()");
luabind::object obj(luabind::from_stack(ls, -1));
}
lua_gc(l
我对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
我在一个C应用程序中使用Lua,我有两个表。我想创建第三个表,虽然它是空的,但它将为前两个表中的值建立索引。我用Lua写了下面这个简单的例子:
a = { one="1", two="2" }
b = { three="3", four="4" }
meta = { __index = function(t,k)
if a[k] == nil then return b[k]
else return a[k] end
end }
c = {}
setmetatable(c, meta)
print(c.one) --
我非常肯定在Lua中,您可以使用给定的元表的__index、__newindex和__call来粗略地复制Ruby的method_missing。我有点想:
function method_missing(selfs, func)
local meta = getmetatable(selfs)
local f
if meta then
f = meta.__index
else
meta = {}
f = rawget
end
meta.__index = function(self, name
我使用版本的Dokan,在系统上挂载磁盘。
我成功地实现了操作系统能够处理dokan磁盘的文件和文件夹所需的所有回调。
每当我尝试用媒体播放器经典播放dokan磁盘上的视频文件时,一切都很好。当我尝试使用VLC时,我会得到以下错误:
File reading failed:
VLC could not read the file (Bad file descriptor).
更新:
File reading failed:
VLC could not read the file (Bad file descriptor).
VLC can't recognize the input
我有一个Lua函数,它返回一个字典表,其中一个放入返回表的值是另一个表,如下面的Lua函数所示。
function tableWithinTable()
local ret = {}
ret["a"] = 1
ret["b"] = {1,2,3}
ret["c"] = 3
return ret
end
我该如何访问内部表呢?
我知道我可以到达该表,因为我可以输入以下if语句。也包括了我当前读取表格的尝试。
lua_pushstring("b");
lua_gettable(lua,1);
i
如何将C++对象返回给lua?
我的C++代码如下:
class MyClass
{
public:
void say()
{
print("Hello\r\n");
}
};
int test(lua_State* l)
{
MyClass* obj = new MyClass();
lua_pushlightuserdata(l, obj);
return 1;
}
Lua测试如下:
local a = MyClass:new()
a:say() <--- OK, beacause I set metatable!!
local b
我正在尝试迭代lua表,但是我一直收到以下错误:
invalid key to 'next'
我知道索引从-8开始,我知道那里有一个表,因为它得到了其中的第一个(也是唯一的)值。然而,即使我知道表中只有一个字符串,它还是试图再次循环。
if (lua_istable(L, index))
{
lua_pushnil(L);
// This is needed for it to even get the first value
index--;
while (lua_next(L, index) != 0)
{
con