`
qdujunjie
  • 浏览: 110365 次
  • 性别: Icon_minigender_1
  • 来自: Mars
社区版块
存档分类
最新评论

Lua调用C函数

    博客分类:
  • Lua
阅读更多
根据《programming in lua》第26章的内容,我做出来的如下:
 
 
1.
首先,我的Lua目录为:D:\lua5.1\
环境为 windows ; VC++express edition 2008 ; Lua5.1.4 ; Notepad++
 
当然,你需要在VC++2008中配置好lua:
 
 
 
这里先不多做解释,假设你已经配置好了。
 
2.
 
找到 D:\lua5.1\src
 
 
目录下的 lua.c 文件,
 
 
将这段代码放到 lua.c 文件中,这就是我们自己定义的C函数:
 
 
static int linjunjie (lua_State *L) {
 printf("hello junjie /n");
  return 1;  /* number of results */
}
 
这里,我们只是简单打印一行文字,没有参数,没有返回值。
 
然后,我们还需要在 lua.c 中的 main 函数中添加我们的自定义函数(也可以称之为“注册”),添加完之后,类似下面这样(红色部分为我们添加部分):
 
 
 
int main (int argc, char **argv) {
  int status;
  struct Smain s;
  lua_State *L = lua_open();  /* create state */ 
 
 lua_pushcfunction(L, linjunjie);
 lua_setglobal(L, "linjunjie");

 
  if (L == NULL) {
    l_message(argv[0], "cannot create state: not enough memory");
    return EXIT_FAILURE;
  }
  s.argc = argc;
  s.argv = argv;
  status = lua_cpcall(L, &pmain, &s);
  report(L, status);
  lua_close(L);
  return (status || s.status) ? EXIT_FAILURE : EXIT_SUCCESS;
}
 
3.
现在代码修改完毕,我们需要重新编译我们的 lua ,方法为
进入VS2008的命令提示,然后执行如下操作:
(到lua5.1目录下,执行etc目录下的luavs.bat批处理,他将替我们编译lua)
D:\lua5.1>d:\lua5.1\etc\luavs.bat
 
 
 
4.
假设第3部没有错误,顺利编译完成之后,这时我们的自定义函数就已经被注册到我们机器中的lua中了,试一下。
 
在VC++2008中,将lua添加为外部工具。
 
 
然后新建一个win32控制台应用程序工程,之后,建立一个文本文件,将
 
linjunjie()
 
拷贝进去,然后更改文件名为 linjunjie.lua(这里只要是lua后缀即可),如下所示:
 
 
然后选择VC++2008中的 工具->lua,这时IDE底部的输出窗口会打印出如下所示:
 
 
这代表我们成功将自定义C函数加入到了我们的lua中
  • 大小: 61.9 KB
  • 大小: 2.4 KB
  • 大小: 2.8 KB
  • 大小: 9.4 KB
  • 大小: 43.8 KB
  • 大小: 22.9 KB
  • 大小: 42.3 KB
  • 大小: 3.3 KB
  • 大小: 4.9 KB
分享到:
评论

相关推荐

    lua调用c函数库的demo

    lua调用c函数库的demo 其中实现了对一个 数组的管理。 注意lua参数与c函数的对应, 如:b=lua_dllb.getarray(a,1) static int getarray(lua_State* L) { NumArray * a=(NumArray*)lua_touserdata(L,1); //对应lua...

    lua调用C++函数

    标题"lua调用C++函数"所涉及的知识点主要包括: 1. **Lua与C++的交互接口**:Lua提供了一个名为`luaL_newstate`的API来创建一个新的Lua状态机,这是与C++交互的基础。然后,通过`luaL_openlibs`打开标准库,使Lua...

    Lua调用C++函数实现

    这主要通过 Lua 的 C API 实现,它提供了一套 C 函数供外部语言(如 C++)调用,同时也允许外部代码注册函数给 Lua 使用。在 C++ 中,我们可以创建一个 Lua 共享库,其中包含用于与 Lua 交互的函数。 1. **创建 Lua...

    Lua中调用C函数

    在Linux底下,从Lua中调用C函数的一个简单例子。

    Lua的最基本使用 C++与lua的互相调用

    在本文中,我们将深入探讨如何在C++程序中集成Lua,实现C++调用Lua函数以及Lua调用C++函数。 一、C++调用Lua函数 1. 配置环境:首先,你需要在C++项目中包含Lua库。确保已经下载并正确安装了Lua,并将其头文件和库...

    lua和c语言之间相互调用实例

    Lua调用C** Lua提供了一种称为"Lua C API"的接口,允许C代码直接与Lua虚拟机进行交互。这个API包括了一系列的函数,用于创建和管理Lua值,以及在Lua和C之间传递数据。例如,`luaL_newstate()`用于创建一个新的Lua...

    Lua编程事例:调用Lua有参函数

    // 调用函数 if (lua_pcall(L, 2, 0, 0) != 0) { printf("Error: %s", lua_tostring(L, -1)); lua_pop(L, 1); // 清理错误信息 } // 清理栈 lua_settop(L, 0); ``` 这里,`lua_script`包含了上述Lua函数的代码,...

    Lua教程(二十):Lua调用C函数

    ### Lua调用C函数 #### 一、引言 在软件开发中,Lua作为一种轻量级的脚本语言,因其简单高效的特点而受到广大开发者的青睐。然而,由于Lua本身的特性限制,在处理某些特定任务时可能显得力不从心,比如涉及到底层...

    Lua的使用入门之在C++程序中调用lua函数1

    要从C++中调用Lua函数,首先需要使用`lua_getglobal()`获取全局函数引用,然后通过`lua_pcall()`执行该函数。假设`move`函数在全局环境中,调用方式如下: ```cpp lua_getglobal(L, "move"); // 获取move函数 if...

    Lua中调用C语言函数实例

    要实现C函数供Lua调用,我们需要遵循特定的函数原型。在Lua中,所有C函数都应定义为`lua_CFunction`类型,即一个接受`lua_State*`指针作为参数并返回整型值的函数。这个整型值表示函数返回的结果数量。例如,以下是...

    tolua++ 版helloworld (lua脚本调用C++类的成员函数方法)

    关于tolua++的资料太少,这个通过实例让你知道如何通过tolua++和C++交互,简单明了。 通过5个文件来演示这个tolua++版 hello world hello.lua ,hello.h ,hello.pkg ,...这个程序实现了脚本调用C++类的成员函数方法

    lua调用C/C++函数

    总结,Lua调用C/C++函数涉及到以下几个步骤: 1. 初始化Lua状态机。 2. 加载并执行Lua脚本。 3. 使用`lua_register`或`lua_pushcfunction`将C/C++函数注册到Lua。 4. 在Lua脚本中通过函数名调用这些函数。 通过这种...

    lua调用C++的经典实例.rar

    - 编写C++函数,这些函数将被Lua调用。确保遵循Lua的数据类型规则,如使用tolua++库提供的类型转换函数。 - 配置项目为64位平台,以匹配Lua 5.3的64位版本。 2. **生成tolua++绑定**: - 使用tolua++工具,根据...

    lua调用可执行文件

    在`lua 调用windows api.txt`中,可能包含了如何使用Lua调用CreateProcess函数的示例。CreateProcess是Windows API中用于创建新进程的函数,可以用来启动一个可执行文件,并获取其进程句柄,从而实现更复杂的控制: ...

    lua 调用 c++ dll 示例

    加载 DLL 后,你可以像调用 Lua 函数一样调用 C++ 函数: ```lua local result = lib.add(3, 5) print(result) -- 输出:8 ``` 6. **异常处理**: 在 Lua 中,由于它没有内置的异常机制,你需要在 C++ 侧处理...

    delphi7与lua相互调用的例子

    在C语言中,通过lua_open函数启动一个Lua虚拟机,然后通过luaL_loadstring或luaL_dostring加载和执行Lua代码。在Delphi中,过程相似,但需使用Delphi的动态链接库(DLL)接口来调用Lua的C API。在这个例子中,"lua-...

    C\C++中调用Lua函数的接口封装

    Lua C API 是一组C语言的函数,允许C/C++代码与Lua脚本进行交互。它提供了一系列的函数,如`luaL_newstate`用于创建一个新的Lua环境,`luaL_openlibs`打开默认的库,以及`luaL_loadbuffer`或`luaL_dofile`用于加载...

    lua与C相互调用例子程序

    3. Lua调用C函数:在Lua中,可以直接调用已经被注册到全局环境的C函数。通过luaL_dostring或luaL_dofile,可以在运行时执行Lua代码,这样就能在运行时调用C函数。 4. 数据类型转换:Lua和C的数据类型是不同的,所以...

    LUA调用C++类

    首先,要实现LUA调用C++类,我们需要一个中间层,这个中间层通常被称为"绑定"或"包装器"。LUA的C API提供了与C/C++交互的接口,我们可以利用这些接口来创建C++类的LUA表示。这里,我们有一个名为`luawrapper`的文件...

    lua实现调用webservice

    将之前生成的 C 函数封装成 Lua 可调用的形式,通常会形成 `.c` 和 `.h` 文件,例如 `luasoap.c` 和 `luasoap.h`。这些文件将使用之前生成的 C/C++ 代码来实现 Lua 对 Web Service 的调用。 #### 三、生成 Linux 下...

Global site tag (gtag.js) - Google Analytics