c++和lua-如何开始?

标签 c++ lua

我正在尝试其他语言。 得到了 VB2013 和 LuaForWindows 5.1 在我的程序中运行 .lua 文件的最基本的文件结构是什么? 我目前已经完成了http://www.youtube.com/watch?v=w51pftzS1_8 includes 部分,做了一个 .h 文件,看起来像这样

#ifndef __LUA_INC_H__
#define __LUA_INC_H__


#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"


#endif // __LUA_INC_H__

和这样的 Run.cpp

#include <iostream>
#include <conio.h>
#include <iostream>
#include "LuaInc.h"

using namespace std;

int main()
{
int iErr = 0;
lua_State *lua = lua_open();  // Open Lua
luaopen_io(lua);              // Load io library
if ((iErr = luaL_loadfile(lua, "test.lua")) == 0)
{
    // Call main...
    if ((iErr = lua_pcall(lua, 0, LUA_MULTRET, 0)) == 0)
    {
        // Push the function name onto the stack
        lua_pushstring(lua, "helloWorld");
        // Function is located in the Global Table
        lua_gettable(lua, LUA_GLOBALSINDEX);
        lua_pcall(lua, 0, 0, 0);
    }
}
lua_close(lua);
_getch();
return 0;
}

test.lua文件在vb213工程目录/MYPROJECT/MYPROJECT

看起来像这样

function helloWorld ()
 io.write ("hello World")
end

最佳答案

从 VS2013 和 Lua for Windows 开始,您将遇到一些与获得正确的 C 运行时库版本相关的痛苦。 Lua for Windows 是针对 VS2005 附带的旧版本 CRT 编译的。可能会也可能不会让 VS2013 链接到那个旧版本。混用 CRT 版本会导致很多困惑。

最简单的方法是获取为您的 Visual Studio 版本构建的 Lua 核心版本。有两种方法可以做到这一点。

  1. Lua Binaries下载一个版本. “官方”Lua Binaries 发行版提供了 Lua 的预构建版本。它可以用于 32 位和 64 位构建、Windows 和其他平台。

  2. 将自己构建 Lua 作为解决方案的一部分。构建您自己的 Lua51.dll 很简单,默认配置是合理的。它主要相当于在 DLL 项目中包含几乎所有的 .c 文件。请注意,lua.c 不是 DLL 的一部分,它是 lua.exe 的源代码。同样,luac.c 不是 DLL 的一部分,它是 luac.exe 的源代码,您需要小心构建;但你不太可能需要它。

无论哪种方式,您都需要注意一些细节。

Lua API 是 C API,不是 C++。所以如果你坚持让你的应用程序成为 C++ 应用程序,你应该将 Lua 头文件包含在 exern "C" block 中:

extern "C" {
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}

原则上,您可以将 Lua 核心构建为 C++。核心是用干净的 C 风格编写的,它也是 C++ 的一个子集,并且在编译为 C++ 时经过测试。但是,如果您走那条路,那么您必须根据您的 C++ 链接自己构建任何二进制模块,如果您依赖许多社区提供的模块,那么这种方式可能是疯狂的。

我相信 Lua Binaries 中所有可用的构建都被编译为 C,而不是 C++,因此需要 extern "C" 声明。

关于c++和lua-如何开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19869189/

相关文章:

c++ - cec 代码不适用于 libcec 4

c++ - 如何反转可变参数模板函数的参数顺序?

recursion - 为什么 lua 不允许本地 lambda 函数递归调用自己?

lua - 当 key 正确时,OpenAI API 返回 "unauthorized"错误

c++ - 对 `SavingsAccount::annualInterestRate' 的 undefined reference

c++ - 无法覆盖使用模板参数包扩展声明的虚方法

templates - Lua:将上下文传递到加载字符串中?

lua - 为什么 "not nil"在 Lua 中返回 true?

function - Lua函数返回问题

c++ - C/C++ 可在 32 位和 64 位机器上执行