問題タブ [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.
c# - C#でのIDispatchの実装
遅延バインディングCOMオブジェクトのc#実装を呼び出すアンマネージコードをエミュレートするためのテストコードを作成しています。以下のようにIDispatchタイプとして宣言されているインターフェースがあります。
以下のコードを使用してIDispatchのGetIDsOfNames
関数を呼び出すと
IDispatchは次のように定義されます。
InvalidCastExceptionがスローされます。ac#インターフェースをIDispatchにキャストすることは可能ですか?
com - 2つの異なるインスタンスで同じ__vfptrを取得するのはなぜですか?
IDispatch/IUnknownポインターから見える__vfptrと混同しました。インプロセスフリースレッドCOMobj(IMyContainer)を作成しています。このオブジェクト内には、同じIMyInterfaceを実装するcomオブジェクトの2つの異なるインスタンスへのポインターを保持する必要があります。そこで、CreateAndSaveDispToMap()を2回呼び出します。
私の考えは、IDispatchポインタをいくつかのstd::mapに保持することです。現時点では、各インスタンスのrefCountは1であると思われます。しかし、驚いたことに、2つの異なるディスパッチポインタに対してpUnkを介して同じ__vftblを取得していることがわかります。
なんで?AddRef()とRelease()が正常に機能する可能性はどのようにありますか?
c++ - C++ を使用した OLE オートメーション: Invoke() から有効な結果ではなく空のバリアントを受け取る
C++ では、次のような OLE メソッドを呼び出そうとしています。
次のコードを使用して呼び出します ( http://www.codeproject.com/KB/office/MSOfficeAuto.aspxから適応):
プログラムはクラッシュせずに実行され、monoIdの出力 BSTR*を受け取りますpvResult
(期待する値を取得します)。しかし、名前を見つける代わりに、空のバリアントのみを取得しますdp:rgvarg[0]
。つまり、端末で表示されます
. LabView から呼び出すと、まったく同じメソッドが正常に機能するため、コードのどこかに問題があると考えられます。名前の出力を回復するにはどうすればよいですか?
delphi - TEventObjectとWebBrowser
TEventObject
を提供するイベントOnMouseDown
を作成しました。マウスを移動したり、Webブラウザーをクリックしたりすると、イベントは完全に機能しますが、Webブラウザーの垂直スクロールバーをスクロールまたはクリックすると、例外が発生します。EurekaLogは、d2d1.dllでEZeroDivide例外を報告します。例外をトラップしようとしましたが、試したことは何も機能していないようです。OnMouseMove
TWebBrowser
EZeroDivide
私の質問は、どういうわけか例外を防ぐことができますか、それとも例外を防ぐためにTWebbrowser垂直スクロールバーのマウスダウンを検出できますか?この例外は、TEventObjectについてあまり詳しくなく、垂直スクロールバーをクリックまたはドラッグしたときにのみ例外が発生する理由がわからないため、解決するのが難しいものです。必要に応じて、より多くの情報を提供できます。コンパイラ:Delphi2010。
[編集] この投稿を参照してください:http: //www.codenewsfast.com/cnf/article/0/waArticleBookmark.7401953 非常にシンプルなデモアプリが http://dl.dropbox.com/u/2167512/bugsで入手できます。 /ie9/ie9_bug.zip
これにより、バグが防止されます。
delphi - インターフェイスを別のプロセスに渡す
WM_COPYDATA を使用して、2 つのプロセス A と B 間の通信を有効にします。基本的なデータ型でデータを交換するのに問題はありません。
場合によっては、プロセス A からプロセス B にインターフェイス (IDispatch) を渡したいことがあります。それは可能ですか?
python - タイプライブラリのないpythonIDispatchクライアント
私はPythonでIDispatchインターフェイスのみを公開し、IDLファイルもタイプライブラリも持たないCOMサーバーを使用しようとしています。さまざまな方法とその使用方法に関するドキュメントがあります。
win32comパッケージを使用しようとすると失敗します。これは、タイプ情報が利用できない場合、属性アクセスがプロパティの取得または設定であり、メソッドの呼び出しではないと想定するためのwin32comフォールバックのように見えるためです。
つまり、私が次のことを行うとき:
win32comは、arg1、arg2を完全に無視して、サーバー上のsomeServerMethodプロパティを取得しようとします。コードを掘り下げると、Pythonがself .__getattr__を呼び出しているためと思われます。これにはarg1、arg2がありません。
私はこれを解決する方法を探しています:
- 私が実際にメソッドを呼び出していることをwin32comに伝えるためのいくつかの構文;
- この動作を実際に実装する他のPythonCOMクライアント。
- 明らかな「ドキュメントを手動でタイプライブラリに変換する」以外のその他の提案。
ありがとう!
c++ - 継承インターフェイス & IUnknown ,IDispatch メソッド定義
抽象メソッドを使用してインターフェイスを継承する必要があります。VB/c# では、インターフェイスからメソッドをオーバーライドするだけで、IUnknown または IDispatch メソッドをコーディングする必要はありません。
しかし、C ++では、クラスでインターフェイスを継承し、インターフェイスでメソッドをオーバーライドした後、派生クラスをインスタンス化しようとすると、次のエラーが発生します
そのため、IUnknown および IDispatch メソッド (addref、Release、QueryInterface、invoke、gettypeinfo など) をオーバーライド/定義する必要があります。
それらは標準関数のように見えるので、どこでコード/定義egATLまたはタイプライブラリを取得できますか? または上記の方法のコード/例を取得できる参照
c# - C#IDispatchポインタのマーシャリング
アンマネージ IDispatch インターフェイスで私のコード呼び出し、関数の 1 つが
これを呼び出すために、私はしようとしています:
明らかにこれは機能しません。オブジェクトを IDispatch ポインターとしてマーシャリングする方法について誰かアドバイスはありますか?
ありがとう
c# - COM/WSH の動作を理解する - 遅延バインド IDispatch _Default と Item?
C# の JScript で観察した動作を再現しようとしています。IDispatch を使用してメンバーを列挙し、それらを遅延バインディング オブジェクトで呼び出しています。私は完全な C++ 初心者であり、COM が非常に危険なほど十分に知っています。ここに私の質問があります:
- DISPID_VALUE は常にゼロ (0) ですか? (そうらしい)
- COM オブジェクトを呼び出すとき、いつ DISPID_VALUE メンバーを呼び出す必要がありますか? (インターフェイス自体がインデックス化または呼び出されたときのようなもの...?)
- いつ.Itemを呼び出すかについてのルール/ヒントはありますか?
- 以下の例で、BindingFlags.SetProperty が (BindingFlags.InvokeMethod ではなく) .Cells(x, x) で機能するのはなぜですか? _Default(x, x) を呼び出していますか? 項目(x, x)? これを行うことをどのように知っていますか?どのように呼び出しているかを調べるにはどうすればよいですか?
- 遅延バインドされた IDispatch COM オブジェクトの呼び出しに関する適切なドキュメントはありますか?
以下の例では、Excel スプレッドシートのセル 1,1 の値がテキストに設定され、「太字」になっています。
次の WSH JScript を検討してください。
この C# コードは同じ結果を生成します (はい、非常に冗長で申し訳ありません)。
時間ができたら、これについてもっと学びたいと考えている方法の 1 つは、ロギング/デバッグで作成する C# COM クラスを JScript で呼び出すことです。