問題タブ [dwscript]

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 投票する
0 に答える
112 参照

delphi - DWScript が外部 TForm インスタンスの TFormStyle プロパティを設定

TdwsRTTIConnector と関数を使用して、スクリプトに「挿入」された TForm インスタンスにいくつかのプロパティを設定しようとしました。

次のスクリプトは、f.FormStyle := 2;の行を除いて正常に動作します。、「無効なクラスの型キャスト」というエラーが表示されます

FormStyle や BorderStyle などの列挙型プロパティを設定する方法

ありがとう

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

delphi - プロシージャ型の引数を持つスクリプトから呼び出される Delphi オブジェクトのメソッドを宣言する方法

DWS スクリプトを実行する Delphi アプリケーションがあります。Delphi アプリケーションは、「MyApplication」と呼ぶオブジェクト インスタンスをスクリプトに公開します。公開されたオブジェクトには、プロシージャである 1 つの引数を持つメソッドがあります。

基本的な目標は、Delphi メソッドで何らかの計算を実行し、コールバック プロシージャが完了したときにこの計算を停止することです。コールバック手順はスクリプト内にあります。

コールバック関数の名前を文字列として渡すことでこれを実装しました。スクリプトのコンパイル時に型チェックが行われないことを除けば、うまく機能します。スクリプト コンパイラがコンパイル時にエラーをキャッチできるように、実際のプロシージャを渡したいと思います。

どうやってするか?

読者が私の言いたいことを理解するのを助けるために、いくつかの - 動かない - コードを示します:

まず、Delphi 側の単純化されたバージョン:

第二に、スクリプト側ではこれがあります(これも簡略化されています):

Demo メソッドの引数を別の方法で宣言し、別の方法で呼び出す必要がある可能性があります。それが質問です...

編集: 余分な Tag 引数を削除しました (コードを単純化したときのエラー、これは問題ではありません)。

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

delphi - DWScript は完全にスレッドセーフですか?

スレッド スクリプトの実行DWScript スレッド セーフは、この状況についてあまり明確ではありません。

スクリプトは、ワーカー スレッドのコンテキストで実行されます。ワーカー スレッドによって呼び出されるスクリプト関数の実行中に、何らかの処理を行う Delphi コードが呼び出されます。この処理では、IPC を使用して別のスレッド (実際にはメインスレッド) と通信し、最終的に同じスクリプト内のプロシージャを呼び出します。少なくとも私が実施した簡単なテストからは、これはうまく機能します。しかし、これは本当に許されるのでしょうか?

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

delphi - DWScript: set-of-enumerated-type を渡すと、整数の配列が渡されます

DWScript スクリプトから、Delphi 側で公開されているオブジェクト インスタンスのメソッドを呼び出します。このメソッドは、とりわけ、列挙されたデータ型のセットである引数を取ります。この列挙型データ型は、Delphi からスクリプトに公開されます。

スクリプトのコンパイル時に生成されるエラー メッセージから、DWScript は整数の配列としてそのような引数を渡し、Delphi 側はバリアント (TData) の配列を受け取ることがわかりました。

Delphi 側で、配列をループするラッパーを作成し、対応する一連の変数を再構築して実際の Delphi 関数に渡す必要がありました。配列へのアクセスは、「ProgramInfo.Vars['MsgFlags'].GetData」を使用して行われます。

これは完全にうまく機能しますが、これは正しいことでしょうか? 私は何か見落としてますか?

スクリプト側のコード:

Delphi サイド コード:

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

delphi - DWScript:Delphi関数からスクリプトにオブジェクトを公開して返しますか?

私の Delphi (2010) コードには、次の方法で DWScript に公開したクラス TImageItem があります。

dwsUnit で、Delphi 側から TImageItem を取得する関数を宣言しました。

Delphi側では:

ただし、次のように始まるスクリプトを実行すると:

GetImage の呼び出し中に、「オブジェクトは既に破棄されています」というメッセージとともに EScriptError が発生します。

私は何を間違っていますか?オブジェクトを公開したり、間違って返したりしていますか?

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

delphi - DWScript: TdwsFileNotifier の潜在的なバグ

プロシージャ TdwsFileNotifier.Execute で、ReadDirectoryChanges 呼び出しが失敗すると、スレッドは Terminate を呼び出して終了しますが、ループはすぐには終了しません。IMO は、次のように Terminate の直後に中断する必要があります。

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

delphi - DWScript FileCreate 関数の戻り値を確認するには?

DWScript を使用して、FileCreate 関数の戻り値を確認する明確な方法がわかりません。

例 (動作しない) スクリプト:

DWScript ソース コードからの抜粋:

ご覧のとおり、内部的に Delphi CreateFile が呼び出され、失敗すると結果の値は -1 になります。この数値は IdwsFileHandle に変換されます。

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

delphi - DWScript を使用して Read–eval–print ループ (REPL) を作成することは可能ですか?

DWScript を使用して Read–eval–print ループ (REPL) を作成しようとしていますが、これが可能かどうかわかりません。

名前に基づいて、RecompileInContextそのコンテキストでは問題なく機能すると思いましたが、いくつかの制限が発生しています。

  • バグのある行はプログラムに永遠に含まれます: その行が原因で、将来の実行は常に失敗します
  • 入力するだけで変数の値を出力する方法が見つかりませんでした。たとえば、var test = "content";thenと入力するとtestcontentが表示されます。私が知る限り、実行ごとに実行されるため、使用printまたはprintln機能しません

だから私の質問は: DWScript を使用して REPL を作成することは可能ですか?

これが私がこれまでに得たものです: