問題タブ [idispatch]

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 に答える
963 参照

c++ - VARIANTARGタイプを比較する方法

VARIANTARG型をDISPPARAMS構造体に割り当てる関数を作成しようとしていますが、実際の引数の型を確認する方法を理解するのに問題があります。

これをコンパイルすると、ifステートメントで2つのエラーが発生します。

したがって、ここではかなり混乱しています。VTS_I4からBYTE値を割り当てることができるのに、後で比較できないのはなぜですか。VTS_I4をBYTEにキャストすると、比較できますが、値が異なるため、ifステートメントはトリガーされません。VTS_I4がafxdisp.hで"\x03"として定義されているので私ができるもう1つのことは、check if(vt == 0x03)であり、これは正常に機能しますが、どういうわけか間違っている必要があります。

この質問をする別の方法は、なぜ私がこれを行うことができるのかということかもしれません:

しかし、これではありません:

ありがとう

0 投票する
3 に答える
1270 参照

javascript - C++ の JScript で instanceof 演算子を呼び出す (IDispatch/IDispatchEx)

Active Script JScript エンジンをホストするアプリケーションがあります。jscript.dll のバージョンによっては、JScript 5.8 まで動作します。アプリケーションは、多くのオブジェクトとメソッドを JScript 環境に公開します。

スクリプトが特定の関数を呼び出す場合、IDL は次のようになります。

HRESULT func(VARIANT varInput);

入力がinstanceof別の関数であるかどうか (つまり、関数がコンストラクターであり、そのプロトタイプが入力のプロトタイプ チェーンにあるかどうか) を判断したい。JScript の場合:

input instanceof Error

IDispatch/IDispatchEx を使用して C++ でこれを行うにはどうすればよいですか?

このメソッドは、IActiveScript (JScript エンジンによって実装される) および IActiveScriptSite (ホストによって実装される) インターフェイスにアクセスできるため、IActiveScript::GetScriptDispatch を使用してグローバル オブジェクトを取得Errorできます。取得しました。

0 投票する
2 に答える
556 参照

c#-4.0 - C# 4、COM 相互運用、および UPnP: 試行錯誤の三頭政治

C# 4 と Microsoft の COM ベースのNAT トラバーサル API (Hnetcfg.dll)を使用して、NAT トラバーサルに UPnP を使用するコード (家庭用のみ) を少し書こうとしています。

残念なことに (またはおそらく幸いなことに)、最後に .NET で COM 相互運用を行う必要があったのは、最後の氷河期の頃でした。相互運用のための C# の動的型の使用とコールバックの記述方法について根本的に混乱しているようです (そのため、 COM サーバーがマネージ コードを呼び出します)。

エキサイティングな数行のコードを次に示します。

上記のコードでは、Add と Remove の呼び出しは問題なく機能します。素晴らしい。

問題は、ポート マッピング エントリの数がいつ変更されたかを知りたいことです。そのためには、コールバック インターフェイス ( INATEventManager::put_NumberOfEntriesCallback ) を登録する必要があります。これは、 INATNumberOfEntriesCallback または IDispatch インターフェイスをサポートする必要があります。VS2012 のオブジェクト ブラウザは、 INATEventManager::put_NumberOfEntriesCallback を次のように記述します。

C# 4 では派手な属性で何かを装飾する必要はなく、下品な方法でデリゲートを INATEventManager::put_NumberOfEntriesCallback に詰め込み、.NET を心配させるだけでコールバックを登録できるという印象を受けました。 IDispatch について、混乱を解消します。しかし、私はひどく間違っているようです。

それで、ええと... NewNumberOfEntries メソッドが確実に呼び出されるようにするにはどうすればよいですか?

また、例外がスローされずに記述できるnat.NATEventManager.NumberOfEntriesCallback = 1;かどうかも少し心配です。nat.NATEventManager.NumberOfEntriesCallback = "Sausages";

0 投票する
3 に答える
3209 参照

c# - ActiveXコンポーネントのすべてのプロパティを検索する

周りを見回してみましたが、COM / ActiveXの世界は非常に混乱しているようで、答えを納得させることができませんでした。
基本的に私が知りたいのは、GUIDが与えられた場合、ActiveXコントロールによって公開されているすべてのインターフェイス、プロパティ、およびメソッドを知る方法はありますか?私はどこかであなたがただ特定の財産がそこにあるかどうか尋ねなければならないことを読みました。しかし、何があるかを知る前に、どうすれば物件について尋ねることができますか?
IDispatchも似たようなことをしていると思いますが、使い方がわかりません。これが機能する場合は、できればC#の小さなスニペットで理解を深めることができます。

ありがとう

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

c# - C# から IDispatch パラメータを渡す

マネージ C# だけでなく、Delphi および C++ プログラムと JavaScript の両方で使用される C# COM dll を作成しています。COM dll には、文字列値を dll に返す関数をアプリケーションが登録するモニター部分が含まれています。私は以前に、関数をパラメーターとして dll に渡すだけの JavaScript 'アプリケーション' に対してこれを行いました。dll が JavaScript の「アプリケーション」にクエリを実行する必要がある場合、以下が実行されます。

「theScript」は C# dll にオブジェクトとして格納されます。私が理解している限り、これは IDispatch によって達成されます。私の理論は、他の言語にも同じアプローチを使用できるはずだということです。そこで、このシグネチャを使用して COM 可視メソッドを作成しました。

ただし、C# からこのメソッドにパラメーターを渡す方法がわかりません。デリゲートを使用してみましたが、デリゲートを呼び出すと、デリゲート (呼び出し名を返すもの) から ToString() メソッドが返されるだけです。私が試したことは他に何もありません。

だから私は2つの質問があります:

  1. C# からこの dll にメソッド パラメータを渡して、必要なときに dll が上記の方法でメソッドを呼び出せるようにするにはどうすればよいですか?
  2. これは本当に IDispatch ですか、それとも javascript で機能する別の理由がありますか?

前もって感謝します

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

delphi - 同じ GUID を持つ 2 つのインターフェイスの相関の相互作用とは

インターフェイスに関する Delphi のタイプ セーフは、一意の (オプションですが、入力されている場合は一意の) GUID を設定することで維持されると考えていました。

次に、その質問がありました: OLE経由で Word CentimetersToPoints を呼び出すと、不明なエラーが発生します

そして、在庫の DelphiTWordApplicationコンポーネント (つまり、Word200.pasユニット) を探し始めました。そして、私が見る:

または類似:

そして、私はここで完全に迷っています。

私はそれが好きなのdispinterface「サブクラス」だと思っていましたか?はいの場合、同じプロジェクトで同じ GUID を持つ 2 つのインターフェイスをどのように設定できますか?interfaceTPersistentTObject

それとも、Delphi の新しいclass型から継承された TurboPascalobjectの型など、関連のない別のフレームワークからのものですか? どちら_GlobalDisp_ApplicationDisp使用されていないように見えるWord200.pasので、付録のように、自動インポートされますが、実際には使用されませんか?

_Applicationと の両方を使用してプロジェクトを作成し、_ApplicationDispコンパイルします。しかし、同じGUIDを持っている場合、Delphiはどのようにそれをタイプキャストするのだろうか?

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

python - IDispatch で Python クラスをラップする

Python を使用して、COM サーバー コンポーネントからのイベントを処理したいと考えています。このサーバーには、IDispatch オブジェクトを受け取り、さまざまなイベントが生成されたときに OnXXX メソッドを呼び出す register() メソッドがあります。

win32com.client または他の python ライブラリでこれを達成できますか? そうするための実際の例は見つかりませんでした。

擬似コード:

ありがとう!

0 投票する
2 に答える
2191 参照

javascript - C++からJavaScriptにC配列を渡す方法

「wtypes.h」でいくつかの定義を見つけました

私の意見では、この定義は、Variant が ac 配列、ptr、または c ポイントとして使用できることを示しています。しかし、次のコードを使用してc配列をjavascriptに渡すと、argのタイプを取得できません

c++からjavascriptにc配列を渡す方法は?