問題タブ [luainterface]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Lua / LuaInterface - C# 属性にアクセスするには?
Lua スクリプトでクラスのカスタム属性にアクセスできる方法を探していました。
通常の C# メソッドを実装し、そのメソッドで通常のリフレクションを使用して属性にアクセスし、Lua オブジェクトで registerMethod を実行できることはわかっています。
ただし、この場合、C# メソッドを記述したくはありませんが、Lua コードを使用して通常の文字列を記述し、そこで属性にアクセスするだけです。
私の質問はそれを行う方法ですか?次のようなことをする正しい方法はありますか
c# - 私のC#アプリケーションにluaを埋め込む:require "luainterface"が失敗する
LuaInterface の最新バージョンをサイトからダウンロードし、LuaInterface.dll と Lua51.dll を参照しました。インタープリター自体は正常に動作しますが、require("luainterface") を実行しようとすると、次の例外が発生します。
この動作を生成するコード例を次に示します。
test.lua スクリプトには次のものがあります。
また、LUA_PATH が luanet.dll の場所を指していることを確認しました。
何が問題なのですか?
c# - C# で Lua コンテナー (仮想ファイル システム) モジュール ローダーを実装する方法
ちょっと怖いですね。
背景情報として、いくつかの lua モジュールを含む tar アーカイブを、LuaInterface を使用して C# アプリケーションにロードしたいと考えています。最も簡単な方法は、これらのファイルを一時フォルダーに抽出し、lua モジュールの検索パスを変更して、require で通常どおり読み取ることです。しかし、これらのスクリプトをファイル システムのどこかに置きたくありません。
だから私は#ziplibで tar アーカイブをロードできるはずだと思った。しかし、#zlib はすでにプロジェクトの一部です。
アーカイブからファイルを文字列 (ストリーム) として正常にロードした後、LuaInterface 経由で C# の lua.DoString(...) に渡すことができるはずです。
しかし、モジュールに「module(..., package.seeall)」のような行がある場合、dostring または dofile によってモジュールをロードするだけでは機能しません。
もう 1 つの問題は、モジュールが tar アーカイブにある他のモジュールに依存している可能性があることです。
考えられる解決策の 1 つは、ここで説明されているようにカスタム ローダーを定義することです。
私の考えは、#ziplib を使用して C# でそのようなローダーを実装し、このローダーを C# アプリケーションの lua スタックにマップすることです。
これと同じような仕事をした人はいますか?このような問題にすでに対処している、すぐに使用できるソリューションはありますか?
tar ファイルは必須ではありませんが、あると便利なパッケージ形式です。
このアイデアは実現可能ですか、それとも完全に不可能ですか?
アーカイブから lua ファイルを抽出するクラスの例をいくつか書きました。このメソッドはローダーとして機能し、lua 関数を返します。
}
LuaInterface にこのような load メソッドを登録してみる
この方法で試してみると、 require の呼び出し中に例外が発生します。
「インスタンス メソッド 'load' には、null 以外のターゲット オブジェクトが必要です」
load メソッドを直接呼び出そうとしましたが、ここでは ":" 表記を使用する必要があります。
そのようなメソッドを呼び出すと、メソッドの上にあるデバッガーのブレークポイントにヒットするため、すべてが期待どおりに機能します。
しかし、「:」表記でメソッドを登録しようとすると、メソッドの登録中に例外が発生します。
"[string "chunk"]:1: ')' の近くに関数の引数が必要です"
c# - LuaInterface - .Net 3.5 / .Net 4.0 FileLoadException でのコンパイル
私のプロジェクトでは LuaInterface を利用しています。XNA から OpenTX への移行と、.Net 4.0 での書き直しを開始しました。
デバッグ中に例外が発生することを確認するために、Lua クラスを移動し始めました (FileLoadException)
LuaInterface を再構築したとき、プロパティの .Net Framework を .Net 2.0 から .Net 4.0 (およびそのクライアント モード) および .Net 3.5 に変更しました。
これらの設定の両方で、まだ 2.0 を使用してビルドされているというエラーが表示されます。
私はここで StackOverflow と MSDN で多くの解決策を試みましたが、app.config をセットアップし、いくつかの不敬な理由でアプリケーション プールを変更することさえ述べています...
とにかく、私が試みたすべての解決策は失敗し、まだ2.0を使用していると述べています。
「IL DASM」を使用しましたが、3.5/4.0 を使用してビルドされたと記載されています。
何が起こっているかについてのアイデアはありますか?一日中これをいじっています。1 つの設定を変更するだけで問題が解決すると考えるのは、単純に単純なのでしょうか?
どんな助けでも大歓迎です。
c# - LuaInterface-.Netクラスへのアクセスを制限する方法は?
LuaInterface 2.0.3を使用して、C#アプリにLuaスクリプト機能を埋め込もうとしています。これは今のところ問題なく機能していますが、指定された少数の.Netクラスのみにアクセスを制限する方法がわかりません。デフォルトでは、すべての.Netライブラリは「luanet」を介して直接アクセスでき、Luaスクリプトは自由に新しいウィンドウを開いたりファイルシステムにアクセスしたりできます。
たとえば、このLuaスクリプトは新しいウィンドウを開きます。
スクリプトの自由は素晴らしいですが、これはホスティングアプリに干渉する可能性があり、私があまり好きではないセキュリティ関連の影響があります。これを無効にする方法はありますか?
c# - Lua で非同期イベントを待機
プロトコルのデータ パケットを作成および解析するライブラリが Lua にあります。パケットを送信すると、宛先からの返信が返されることを期待しています。返信はテーブルに解析されます。次のような関数呼び出しを行うことができるように、このライブラリの周りにラッパーを書き込もうとしています:result = SendUnicast(dest,packetData)
解析された応答テーブルが結果に返されるようにします。
私の問題は 2 つあります: 1) 受信メッセージが非同期で、実行中のスクリプトとは別のスレッドで受信され、2) 受信する次のパケットは必ずしも要求に対する応答ではないため、受信パケットを解析して一致させる必要があります。シーケンス ID。
現在のプログラム フローは次のようになります。
[C# UI スレッド]
- ボタンクリック
- Lua スクリプトの実行
- SendUnicast を呼び出す
- 応答を待つ
[C# データ スレッド]
- 着信メッセージ
- メッセージを Lua パーサー関数に渡す
- シーケンスが待機中のコマンドと一致する場合、解析されたテーブルを保存し、ブロックされた再開
[C# UI スレッド]
- Lua scipt は解析されたテーブルを返します
現在実行中のスクリプト (UIThread 内) をブロックするための適切な方法が見つからないようです。メッセージが解析されたときに呼び出されるコルーチンを作成するとwhile coroutine.status(co) ~= "dead"
、lua インタープリターが強制終了されるようです。
編集
この問題を処理する正しい方法であるため、BMitch の回答を承認済みとしてマークしています。ただし、LuaInterface はコルーチンをサポートしていないため、コルーチンのサポートを自分で C# コードに追加する必要があったことに注意してください。
c# - C#外部ライブラリ(Lua)呼び出しの問題
私はC#(VS2010).Net(4.0)でのプログラミングに不慣れで、すでに数日以来、自分で解決できないことに遭遇しています。
C#コードで外部スクリプト言語(Lua)を使用しています。
そのために、.Net4.0用に構築されたLuaInterpreterを使用します
最初の試行:プロジェクトはコンソールアプリケーションです-> Luaクラスを呼び出そうとすると、プログラムは正常に動作します。
2回目の試行:プロジェクトはExcelから使用されるクラスライブラリCOMです->クラスライブラリは正常にコンパイルされ、ユーザー定義関数はExcel内で正常に機能します。しかし、Luaクラスを呼び出そうとすると、Luaアセンブリが欠落していると言ってクラッシュしました。
問題を再現するには:
1- http: //www.mdome.org/2011/05/16/luainterface-for-csharp-net-4-custom-build/からLuaInterface.Net4.0を入手する必要があり ます
2-プロジェクトの参照としてLuaInterfaceを追加します
3-構築ディレクトリにLua51DLLをコピーします(Excelシートもそこに置きます)
4-クラスライブラリのコードをコピーします
クラッシュした関数は、Excelから呼び出されたときのテスト関数です
私はそのおかげで助けを借ります
.net - テーブルをバイト配列に変換します
LuaテーブルをC#バイト配列に変換しようとしています。次のように機能するDouble配列への変換を取得できました。
ただし、を配列( )に変更するdbl_arr
と、次のエラーが発生します。Byte
dbl_arr = Byte[4]
(error object is not a string)
運が悪かったので、いろいろなことを試しました。どんな助けでもいただければ幸いです。
アップデート:
これを行うことで、エラーからもう少し多くの情報を得ることができました。
Nowsuc
はfalseでありerr
、次のメッセージを返します。
ここからluaforwindowsをインストールしました。バージョン5.1.4-45です。Microsoft WindowsXPProfessionalバージョン2002ServicePack3を実行しています
アップデート:
これはサンプルコードであり、エラーが発生する場所です
.net - Lua の CLRPackage を実行するように Wireshark をセットアップする方法
LuaInterfaceを使用して .NET フレームワークのいくつかのクラスを使用できるように、Wiresharkをセットアップしようとしています。Lua コマンド ラインを使用して動作させることはできますが、起動スクリプトで実行しようとすると、必要なファイルが見つからないように見えます。Wireshark の起動時に次の例外が発生します。require "CLRPackage"
init.lua
package.path
コマンドラインで設定されているものと一致するようにandを設定しようとしましpackage.cpath
たが、それは役に立たないようです。
これを行うと、次のエラーが表示されます。
ファイルが確実に存在するため、これは奇妙なエラーです。
に Windows 用の Lua パッケージをインストールしましたC:\Program Files\Lua\5.1
。
誰もこれを機能させることができましたか? どんな助けでも大歓迎です。
Lua 5.1.4 で Wireshark 1.4.4 を使用しています
c# - LuaInterface ランダム例外
作成中のゲームでスクリプトを作成するために LuaInterface を使用しています。
スクリプトは非常にうまく機能しますが、どういうわけか、ランダムな例外がたくさん発生します。
ゲームサーバーとのネットワークを処理する別のスレッドから呼び出される C# コードから lua 関数を呼び出す場所に問題を絞り込みました。
何が起こっていると思いますが、lua コードが実行されており、lua 関数が C# から別のスレッドから呼び出されているため、ランダム エラーが発生しています。
C# から関数を呼び出す方法:
function は LuaFunction 型で、 message はカスタム オブジェクトです。
私が得ているエラー:
- タイプ 'LuaInterface.LuaScriptException' の初回例外が LuaInterface.dll で発生しました
- lua の実行中にエラーが発生しました: 関数
- タイプ 'LuaInterface.LuaScriptException' の初回例外が LuaInterface.dll で発生しました
- スクリプトを開けません: mainmenu/console
LuaVM が作成されたスレッド以外のスレッドから lua 関数を実行することに関係があるのでしょうか?