c语言如何调用lua写的函数?

暴躁的野生猿 2018-07-31 08:52:44
如果lua函数的形参和返回值都是整数,我现在已经可以用C语言调用它了。现在我想做的是,让lua函数返回字符串,用c语言读取lua的返回值,该怎么做呢?
先来看一下正确的例子:(lua函数的形参和返回值都是整数)
lua函数如下:
function add(x, y)
print("call lua_file add")
return x + y
end

c语言函数如下:
int lua_add(int x,int y)
{
int sum;
/*the function name*/
lua_getglobal(L,"add");
/*the first argument*/
lua_pushnumber(L,x);
/*the second argument*/
lua_pushnumber(L,y);
/*call the function with 2 arguments, return 1 result.*/
lua_call(L,2,1);
/*get the result.*/
sum = (int)lua_tonumber(L,-1);//可以正确读出返回值
/*cleanup the return*/
lua_pop(L,1);
return sum;
}

以上代码没有问题,可以正确的按照我预期的样子运行。

下面再看看错误的代码,求教各路大神,问题出在哪?
贴代码:lua函数如下:
function parse(did)
string str = "did is not 1"
print("call lua_file parse")
if(1 == did)
then
str = "did is 1"
end
return str
end


c语言调用lua函数的代码如下:
int lua_parse(int did)
{
const char *buf;
uint len;
/*the function name*/
lua_getglobal(L,"parse");
/*the first argument*/
lua_pushnumber(L,did);
/*call the function with 1 arguments, return 1 result.*/
lua_call(L,1,1);
/*get the result.*/
buf = lua_tolstring(L,-1, &len);//我以为buf会得到lua函数返回的字符串的首地址
printf("ret len = %d\r\n", len);
/*cleanup the return*/
lua_pop(L,1);
return 0;
}

上述C语言代码,无法运行,直接报错,提示:unprotected errors in call to Lua API (attempt to call a nil value)
这个错误提示我理解不了,到底是在哪一行代码中,我引用了nil值?
...全文
247 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
donjin9 2018-08-01
  • 打赏
  • 举报
回复
lua函数中,string类型好像要删掉吧。print需要加luaopen_base(L)或者luaL_openlibs(L)。
代码转载自:https://pan.quark.cn/s/e436538e5688 C语言Lua的互操作机制全面说明C语言Lua的互操作机制是指利用C语言调用Lua脚本或者通过Lua脚本调用C语言函数的操作流程。 这种互操作机制能够使开发者在不同的编程语言之间实现代码共享,从而达到更优的代码复用性和更高的灵活性。 Lua语言概述Lua被设计为一种轻量级且适应性强的脚本语言,在游戏开发、嵌入式设备应用、科学分析等多个领域得到了广泛的使用。 Lua语言的核心部分设计得十分简洁,但用户可以通过引入lua库来完成大部分编程任务。 此外,Lua能够借助与C函数的互操作来增强应用程序的功能。 在C语言中执行Lua脚本通过C语言来执行Lua脚本,可以让用户在不重新构建程序的情况下更新Lua脚本内容,同时也能够为用户提供一个可自由定制的操作接口。 在C语言中执行Lua脚本的流程如下:1. 引入lua头文件2. 构建lua状态机3. 启动Lua标准库4. 执行lua脚本5. 触发lua函数Lua脚本中执行C函数Lua脚本内调用C函数能够显著提升程序的执行效能。 Lua脚本调用C函数的操作步骤如下:1. 在Lua脚本里声明C函数2. 应用lua_call函数来执行C函数3. 获取C函数的输出结果示范性程序以下是一个基础的示范性程序,展示了C语言如何执行Lua脚本:```c#include #include "lua.h"#include "lualib.h"#include "lauxlib.h"lua_State* L;int luaadd(int x, int y) { int sum; lua_getglobal(L, "add"); lua_pushnumber...

24,856

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧