3

他の言語を試しています。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__

そして、このような 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 プロジェクト dir/MYPROJECT/MYPROJECT にあります。

そしてこのように見えます

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

2 に答える 2

2

VS2013 と Windows 用の Lua から、適切な C ランタイム ライブラリのバージョンを取得することに関連するいくつかの苦労が発生します。Lua for Windows は、VS2005 に付属する古いバージョンの CRT に対してコンパイルされました。VS2013 をその古いバージョンにリンクさせることができる場合とできない場合があります。CRT のバージョンを混在させると、多くの混乱が生じます。

最も簡単な方法は、Visual Studio のバージョン用にビルドされた Lua コアのバージョンを入手することです。これには 2 つの方法があります。

  1. Lua Binariesからバージョンをダウンロードします。「公式」の Lua Binaries ディストリビューションから利用できる Lua のビルド済みバージョンがあります。32 ビットおよび 64 ビットのビルド、Windows、およびその他のプラットフォームで使用できます。

  2. ソリューションの一部として自分で Lua をビルドします。独自のものを構築するのLua51.dllは簡単です。デフォルトの構成は賢明です。ほとんどすべての .c ファイルを DLL プロジェクトに含めることになります。lua.cは DLL の一部ではなく、 のソースであることに注意してくださいlua.exe。同様に、luac.cは DLL の一部ではなく、luac.exe自分でビルドするには注意が必要なソースです。しかし、あなたはそれを必要としないでしょう。

いずれにせよ、いくつかの詳細に注意を払う必要があります。

Lua API はC++ ではなくC API です。したがって、アプリケーションを C++ アプリケーションにすることを主張する場合は、Lua ヘッダー ファイルのインクルードをexern "C"ブロック内にラップする必要があります。

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

原則として、代わりに C++ として Lua コアをビルドできます。コアは、C++ のサブセットでもあるクリーンな C フレーバーで記述されており、C++ としてコンパイルされたときにテストされます。ただし、その方法を使用する場合は、C++ リンケージに対してバイナリ モジュールを自分でビルドする必要があり、コミュニティが提供する多くのモジュールに依存している場合、その方法は狂気のように嘘をつく可能性があります。

Lua Binaries で利用可能なビルドはすべて C++ ではなく C としてコンパイルされていると思います。そのため、これらのビルドではextern "C"宣言が必要になります。

于 2013-11-08T22:43:02.340 に答える
0

まず、C++ をスクラッチして、主要なプログラミング言語として lua に切り替えることをお勧めします。少なくとも私の経験では、C++ から lua 関数を呼び出すのは非常に面倒です。Lua について十分に理解したら、Lua から dll または他のファイル/システム形式を介して c/c++ 関数を呼び出します。Python を学ぶか、C/C++ を学ぶかで迷った結果、Python を選びました。そこから Lua について学び、Python よりも Lua が好きになりました。繰り返しますが、これは私の経験と提案です。あなたの質問に答えるために、なぜ C++ で Lua を実行するのですか? Lua は C API に基づいているため、生の C をそのまま使用するか、C++ をそのまま使用します。私がこれを言うのは、Lua が技術的には C の骨抜きバージョンと変わらないからです。ただし、Lua は完全に機能するスタンドアロン プログラミング言語として使用できるため、もはや「骨抜き」ではありません。

于 2014-12-06T21:06:55.993 に答える