問題タブ [jint]
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.
javascript - Jint (.NET JavaScript パーサー) は常に ExpandoObject を返します
ゲームのMODを書こうとしています。これは私にとってまったく新しい領域なので、ここで間違った方向に進んでいる可能性があります。ゲームは Unity で書かれており、mod に .script ファイルを追加できます。.script ファイルには、Jint によって解析される JavaScript を含めることができます。
ゲーム DLL の 1 つから単純な文字列を出力しようとしました。
GameMain.dll には次のように書かれています。
私の理解では、GameMain.Game.ModPath は文字列を提供する必要があります。しかし代わりに、ログ ファイルの出力は次のようになります。
どんなに出力しようとしても、System.Dynamic.ExpandoObject を取得し、それをどう処理すればよいかわかりません。誰かが私に役立つヒントやリソースを提供してくれるかもしれません。:)
c# - IIFE トリガー エラーのある GetCompletionValue
で使用しようとすると例外が発生GetCompletionValue
しInvoker
ます。IIFE字句スコープで関数を
実行するにはどうすればよいですか?run
Javascript:
私の呼び出し元:
エラー:
javascript - JInt を使用した複雑なオブジェクトの解析と評価
特定の式を評価する必要があり、評価に基づいて次のステップを選択します。これにはJint javascriptインタープリターを使用しようとしています。
json からの基本的な評価では、正常に動作しています。しかし、アレイに追加の操作を追加しようとすると、問題が発生します。
私のアプローチ、ベースオブジェクトの値を設定する=>式を評価する関数を書く=>この関数を呼び出し、評価する式を渡す=>関数はevalを使用して渡された文字列を評価します。初期オブジェクトは、前の手順ですでに設定されています。
このようなもの、
この中で、inputStart は、既に使用して設定したベース オブジェクトです。
engine.SetValue("inputStart", JsonConvert.DeserializeObject(inputStart));
inputStart は json テキストです。Fiddle には、参照用の文字列もあります。そして最後に関数、
このコードは正しく動作します。バリエーションは、配列を含む別のjsonテキストがあります。そして、フィルターまたは検索を使用して特定の配列項目を見つけ、それを操作しようとしています。このようなもの、
これにより、以下のエラーが表示されます。
未処理の例外。System.ArgumentException: 無効なキー値を持つ JArray 値にアクセスしました: "filter"。Int32 配列インデックスが必要です。
参照用の私の完全なプログラム、
これが私がやろうとしていることの完全なフィドルです、https://dotnetfiddle.net/GtamM8
誰かがそのような問題に遭遇した場合、またはこれに対する解決策を提案できる場合は、非常に役立ちます.
javascript - アプリケーションを 64 ビット アプリケーションとして実行すると、JINT のパフォーマンスが大幅に低下する
アプリケーションは JS サポートを必要とし (プログラムは C# で記述されています)、JINT がインタープリターとして使用されています。アプリケーションを 64 ビット アプリケーションとして実行すると、パフォーマンスが大幅に低下することに気付きました。
問題を説明する次の例にこれを単純化しました。
これを 32 ビット アプリケーションとしてコンパイルすると、約 11 秒かかります。これを 64 ビット アプリケーションとしてコンパイルすると、約 35 秒かかります。実際のアプリケーションでは例外が頻繁にスローされることに注意してください。
なぜこれが事実なのか誰にも分かりますか?
これは、デバッガーで実行している場合にのみ問題になることに注意してください。デバッガの外では、パフォーマンスは似ているようです。
更新 #1
私はまだこれに取り組んでおり、現在は次の例があります。
32 ビット アプリを実行すると、64 ビット アプリとしてビルドした場合よりも 20 ~ 30% 高速になります。
これをしても:
したがって、.NET コールバックがなくても、64 ビット モードでは 10 ~ 20% 遅くなります。
これがなぜなのか誰か知っていますか?
アップデート #2
この例は、32 ビット プロセスと 64 ビット プロセスの速度の違いを示しています。違いを示すために、benchmarkdotnet.org を使用しました。
スクリプトはすべてコメントアウトされており、実行中です。64 ビット プロセスは約 30% 遅くなります。スクリプトが解析されているかどうかに違いはないようです。
なぜこれが当てはまるのか誰にも分かりますか?