問題タブ [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.

0 投票する
1 に答える
249 参照

javascript - Jint (.NET JavaScript パーサー) は常に ExpandoObject を返します

ゲームのMODを書こうとしています。これは私にとってまったく新しい領域なので、ここで間違った方向に進んでいる可能性があります。ゲームは Unity で書かれており、mod に .script ファイルを追加できます。.script ファイルには、Jint によって解析される JavaScript を含めることができます。

ゲーム DLL の 1 つから単純な文字列を出力しようとしました。

GameMain.dll には次のように書かれています。

私の理解では、GameMain.Game.ModPath は文字列を提供する必要があります。しかし代わりに、ログ ファイルの出力は次のようになります。

どんなに出力しようとしても、System.Dynamic.ExpandoObject を取得し、それをどう処理すればよいかわかりません。誰かが私に役立つヒントやリソースを提供してくれるかもしれません。:)

0 投票する
1 に答える
55 参照

c# - IIFE トリガー エラーのある GetCompletionValue

で使用しようとすると例外が発生GetCompletionValueInvokerます。IIFE字句スコープで関数を
実行するにはどうすればよいですか?run

Javascript:

私の呼び出し元:

エラー:

0 投票する
1 に答える
200 参照

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

誰かがそのような問題に遭遇した場合、またはこれに対する解決策を提案できる場合は、非常に役立ちます.

0 投票する
0 に答える
559 参照

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% 遅くなります。スクリプトが解析されているかどうかに違いはないようです。

なぜこれが当てはまるのか誰にも分かりますか?