小编RBe*_*eig的帖子

如何在C++和Lua之间来回传递大型结构

我正在考虑将Lua嵌入到我正在开发的C++应用程序中.我的目的是使用Lua编写为某些给定输入执行的有序操作的脚本,即.在c ++程序中收到一个新的工作项,将细节传递给Lua后端,Lua调用c ++来执行必要的工作,返回完成的结果.

涉及的主要数据结构是一个大型(大约80多个成员)struct.我(非常)是Lua的新手,我不确定如何将它传递给我的主机应用程序和嵌入式Lua状态.

到目前为止,我看到我的选择:

a)当与C++和Lua交叉时,将所有单个数据成员推送/弹出(听起来很混乱).

b)构造一个表并填充值,然后将其放入/关闭堆栈(稍微清洁一点).

c)把它传递给userdata(轻/重?)(我对此很粗略,不知道我是否可以从Lua那边访问它以查询必要的操作).

任何指导将不胜感激.

c++ lua

5
推荐指数
1
解决办法
3575
查看次数

在Lua中加载C模块

我正在尝试将示例lproc程序(在编程Lua,第30章中描述)加载到Lua中并以某种方式结束.我正在关注这个 - http://www.lua.org/pil/26.2.html让我的c模块进入lua.以下是我采取的步骤:

  1. 我有一个lproc.h和lproc.c(完全包含本书第30章中列出的函数).我正在编译lproc.c为--- gcc -c lproc.c -DLUA-USERCONFIG = \"lproc.h \"

  2. 我用lproc.o创建了一个库,命名相同.

  3. 然后按照指示编译lua.c.我的头文件包含宏LUA_EXTRALIBS和方法声明.

  4. 去了Lua解释器,它给出了以下错误:

> require "lproc"
stdin:1: module 'lproc' not found:
    no field package.preload['lproc']
    no file './lproc.lua'
    no file '/opt/local/share/lua/5.1/lproc.lua'
    no file '/opt/local/share/lua/5.1/lproc/init.lua'
    no file '/opt/local/lib/lua/5.1/lproc.lua'
    no file '/opt/local/lib/lua/5.1/lproc/init.lua'
    no file './lproc.so'
    no file '/opt/local/lib/lua/5.1/lproc.so'
    no file '/opt/local/lib/lua/5.1/loadall.so'
stack traceback:
    [C]: in function 'require'
    stdin:1: in main chunk
    [C]: ?

似乎该模块没有注册,我需要从Lua做什么?时间很短,我做了一件可怕的事,任何方向都会受到欢迎.

谢谢,
萨彦

lua

5
推荐指数
2
解决办法
6990
查看次数

在一行中将字符串设为null

为了使字符串成为空字符串我写了这个:

#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
    char str[15]="fahad uddin";
    strlen(str);
    puts(str);
    for(int i=0;str[i]!='\0';i++)
        strcpy(&str[i],"\0") ;
    puts(str);
    getch();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在此之前,我试过:

#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
    char str[15]="fahad uddin";
    strlen(str);
    puts(str);
    for(int i=0;str[i]!='\0';i++,strcpy(&str[i],"\0"))
        ;
    puts(str);
    getch();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在第一个示例中,程序运行正常,而在第二个示例中,它打印字符串的第一个字母(在此示例中为F).为什么是这样?

c for-loop

5
推荐指数
3
解决办法
1万
查看次数

如何使用ac程序访问XP中的原始磁盘扇区?

我想知道如何使用C程序访问Windows XP中的硬盘扇区?

c windows winapi

5
推荐指数
1
解决办法
2318
查看次数

为什么我不能使用Set:union()而不是Set.union?

我正在学习Lua,我宁愿使用冒号(:)方法.不幸的是,它无处不在.看我的代码:

Set= {}
local mt= {}
function Set:new(m)
    local set= {}
    setmetatable(set,mt)
    for a,b in pairs (m) do
        set[b]=true
    end
    return set
end

function Set.union(a,b)
    local res=Set:new ({})
    for k in pairs (a) do res[k]=true end
    for k in pairs (b) do res[k]=true end
    return res
end
mt.__add=Set.union   -- why Set:union() is not working here ?

s1=Set:new {22,55,77}
s2=Set:new {2,5,3}
s3=s1+s2

我怎样才能Set:union()在上述地方使用或者不能在这里使用?

lua call operation

5
推荐指数
1
解决办法
1337
查看次数

将Lua数据转换为JSON

这个EPGP魔兽世界插件输出一个epgp.lua数据库文件.

我写了一个插件,将Lua数据转换为JSON对象,以便在公会网站上显示.它在旧版本的插件中工作,但现在我无法让它正确地转换文件.以下是显示转换问题的两个片段 - 请参阅此演示.

第一个非常适合形成嵌套数组:

["roster_info"] = {
    {
        "Agantica", -- [1]
        "ROGUE", -- [2]
        "09/03-2013", -- [3]
    }, -- [1]
    {
        "Intikamim", -- [1]
        "PALADIN", -- [2]
        "17/02-2013", -- [3]
    }, -- [2]
},
Run Code Online (Sandbox Code Playgroud)

"roster_info" : [
    [
        "Agantica",
        "ROGUE",
        "09/03-2013"
    ],
    [
        "Intikamim",
        "PALADIN",
        "17/02-2013"
    ]
]
Run Code Online (Sandbox Code Playgroud)

但是当字符串替换应该是数组中的对象时,字符串替换将此下一个片段视为嵌套数组:

["bonus_loot_log"] = {
    {
        ["player"] = "Magebox",
        ["timestamp"] = "2013-03-07 13:44:00",
        ["coinsLeft"] = "-1",
        ["reward"] = "|cffa335ee|Hitem:86815:0:0:0:0:0:0:632235520:90:0:445|h[Attenuating Bracers]|h|r",
    }, -- [1]
            {
        ["player"] …
Run Code Online (Sandbox Code Playgroud)

javascript lua replace world-of-warcraft

5
推荐指数
2
解决办法
9077
查看次数

luac.out:不兼容的预编译块

我使用 luac 来编译我的 lua 代码。luac版本是5.2.2,我的app原生lua是5.2.2。

我的lua代码

function hello()
    print("hello test luac ")
end

hello()
Run Code Online (Sandbox Code Playgroud)

预编译代码:

1b4c 7561 5200 0104 0804 0800 1993 0d0a
1a0a 0000 0000 0000 0000 0001 0205 0000
0025 0000 0008 0000 8006 0040 001d 4080
001f 0080 0001 0000 0004 0600 0000 0000
0000 6865 6c6c 6f00 0100 0000 0100 0000
0300 0000 0000 0204 0000 0006 0040 0041
4000 001d 4000 011f 0080 0002 0000 0004
0600 0000 0000 0000 7072 696e 7400 0411
0000 …

macos lua luac

5
推荐指数
1
解决办法
2334
查看次数

srlua makefile错误lua.h没有这样的文件或目录

我正在尝试将srlua我的lua文件编译为可执行文件,但我遇到了问题.

anthony@anthony-linux:~/Downloads/srlua$ make
gcc -I/tmp/lhf/lua-5.2.0/src -ansi -pedantic -Wall -Wextra -O2    -c -o srlua.o srlua.c
srlua.c:19:17: fatal error: lua.h: No such file or directory
compilation terminated.
make: *** [srlua.o] Error 1

我正在运行linux 64bit(ubuntu)

编辑:我尝试更改我的makefile的设置,但现在我得到了这个

anthony@anthony-linux:~/Downloads/srlua$ sudo make
gcc -I/usr/local/include -ansi -pedantic -Wall -Wextra -O2    -c -o srlua.o srlua.c
srlua.c:19:17: fatal error: lua.h: No such file or directory
compilation terminated.
make: *** [srlua.o] Error 1

linux lua compiler-errors makefile

5
推荐指数
1
解决办法
3万
查看次数

C++ builder 6和codegear的C++ builder 2009兼容性

我需要支持使用C++ Builder的6开发了一些软件代码,而目前的开发环境是CodeGear的C++ Builder的2009年.我想知道CodeGear的C++ Builder的2009年向后与C++ Builder的6兼容吗?

任何答案都表示赞赏.

提前致谢.

大卫.

c++ c++builder

4
推荐指数
1
解决办法
1079
查看次数

对于R中的对角矩阵,将0替换为1,反之亦然

任何人都可以告诉我如何用1代替0,反之亦然代替R中的对角矩阵.

r

4
推荐指数
1
解决办法
2402
查看次数