c++ 和 lua-如何开始
c++ And lua-how to begin?
我正在尝试其他语言。 获得VB2013和LuaForWindows 5.1在我的程序中运行.lua文件的最基本文件结构是什么?我目前已经完成了 http://www.youtube.com/watch?v=w51pftzS1_8 包括部分,制作了一个看起来像这样的.h文件
#ifndef __LUA_INC_H__
#define __LUA_INC_H__
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
#endif // __LUA_INC_H__
和运行.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 项目 dir/MYPROJECT/MYPROJECT 中
看起来像这样
function helloWorld ()
io.write ("hello World")
end
从VS2013和Lua for Windows开始,您将遇到一些与获得正确的C运行时库版本相关的痛苦。Lua for Windows是针对VS2005附带的旧版本的CRT编译的。可能或可能无法让VS2013链接到该旧版本。混合CRT版本会导致很多混乱。
最简单的方法是获取为您的Visual Studio版本构建的Lua核心版本。有两种方法可以做到这一点。
-
从 Lua 二进制文件下载版本。Lua的预构建版本可以从"官方"Lua Binaries发行版中获得。它可以用于 32 位和 64 位版本、Windows 和其他平台。
-
自己构建 Lua 作为解决方案的一部分。构建自己的
Lua51.dll
很简单,默认配置是明智的。它主要相当于在DLL项目中包括几乎所有的.c文件。请注意,lua.c
不是 DLL 的一部分,而是要lua.exe
的源。同样,luac.c
不是 DLL 的一部分,它是luac.exe
的源代码,这确实需要小心来构建自己;但你不太可能需要它。
无论哪种方式,您都需要注意一些细节。
Lua API 是 C API,而不是C++。因此,如果你坚持让你的应用程序成为一个C++应用程序,你应该将Lua头文件的包含包装在一个exern "C"
块中:
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作为您的主要编程语言。 用 c++ 调用 lua 函数是相当混乱的,至少这是我的经验。 一旦你对Lua有足够的了解,然后通过dll或其他文件/系统格式从Lua调用c/c ++函数。 我在学习python或c/c ++之间左右为难,我选择了python。 从那里我了解了Lua,并且比python更喜欢它。 同样,这只是我的经验和建议。 现在回答你的问题,为什么要在C++运行Lua? Lua基于C API,所以我只会使用原始C或坚持使用C++。 我这样说只是因为Lua在技术上与C的淡化版本没有什么不同。 然而,Lua不再被"淡化",因为它可以用作一种完全可操作的独立编程语言。
- 当回溯以零开始时,如何调试崩溃
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 如何从头开始创建 avi 文件?
- 为什么 -mmacosx-version-min=10.10 不阻止使用标记为从 10.11 开始的函数?
- 自一周开始以来的秒数?
- 一旦双簧管录制开始,主 UI 线程就会被阻止
- GStreamer在开始任何播放之前进行搜索
- 使 std::fstream 写入文件末尾,但从头开始读取
- 如何以毫秒为单位获取开始时间和 now() 之间的毫秒差异(以 C++为单位?
- 哪个C++规范开始支持 std::vector
- 如何继续读取不同功能中的文件,而不是从头开始再次读取文件?
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 如何在调试中通过传递引用开始
- 如何使用 picojson.h 在 c++ 中从头开始创建 json 对象
- 从特定键开始遍历地图
- 列表的有效性在插入后开始迭代器
- 尝试从头开始实现Leetcode的FizzBuzz多线程问题。收到"libc++abi.dylib: terminating"错误
- 试图修复一个错误,该错误不会让我开始编程其余部分
- 如何检测Windows开始菜单/开始屏幕何时打开
- 在C#中为windows API编写COM服务器,从何开始