問題タブ [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 投票する
4 に答える
686 参照

c# - C++ DLL が C# DLL を呼び出すためのオプションは何ですか?

C# クラス ライブラリで関数を呼び出す (値を渡す、値を返す) 必要がある C++ DLL があります。

C# DLL に COM インターフェイスを提供し、IDispatch を使用して C++ から呼び出す唯一のオプションはありますか?

これが最善の方法ですか?

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

c++ - DISPPARAMS から適切な IDispatch を取得できますか?

適切なIDispatchポインターを取得してから、それをCMyDispatchポインターにキャストし、後でそれを処理したいと考えています。

つまり、JavaScriptで次のようなことをしたい:

xyCMyDispatchのインスタンスです。

CMyDispatchは次のように javascript に返されます。

DISPATCH_PROPERTYPUTフラグを指定したCMyDispatch.Invoke() ではy値を保持するCMyDispatchインスタンスを取得したいと考えています。

次のコードを使用すると、pDispatchがガベージに設定されます。

適切なCMyDispatchポインターを取得するにはどうすればよいですか? ありがとうございました。

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

c++ - 「純粋な」IDispatchインターフェイスにはプロキシ/スタブDLLが必要ですか?

..アウトプロセスサーバーの場合、またはプロキシ/スタブを登録せずにディスパッチインターフェイスを呼び出すことはできますか?

問題のインターフェースは非常に高レベルであるため、パフォーマンスは問題ではなく、すべてを登録なしにすることができました。これは大きなプラスです。

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

internet-explorer - PID を指定して IE8 ウィンドウの IWebBrowser2 ポインタを見つける方法は?

これまでのところ、次の関数を使用して、実行中の Internet Explorer インスタンスへの IWebBrowser2 ポインターを PID で取得することに成功しました。

私がしていることは、explorer.exe経由でプロセスを起動しCreateProcess、上記の関数を使用して IWebBrowser2Ptr を取得することです (ブラウザーをいじることができるように)。

残念ながら、IE8 はプロセスを再利用しているように見えるため、これは Internet Explorer 8 では動作しないようです (少なくともある程度は)。次のような 2 つのコード シーケンスの場合:

このコードの最初の実行は正常に機能しますが、2 回目は pWebBrowser ウィンドウを取得できません。

少しデバッグした後、このfindBrowserByPID関数は多くのブラウザー ウィンドウを検出する (そして、2 番目のブラウザー インスタンスを開始するとさらに多くのウィンドウを検出する) が、新しく開始されたプロセスに属していないことが明らかになりました。すべてのウィンドウは、最初に開始された IE プロセスに属しているようです。

IWebBrowser2 ポインターを IE8 インスタンスに取得する別の方法を知っている人はいますか? または、IE8 でこのプロセスの明らかな「再利用」を無効にする方法はありますか?

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

object - すべてのプロパティに応答するIDispatchオブジェクト?

すべてのプロパティの値を返すIDispatchオブジェクトを作成したいと思います。「foo」を要求すると、何かが返されます。「バー」は何かを返します。「faid1jhgi31jifj」も。

ポインタはありますか?

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

c++ - マシン上のすべてのIDispatch実装オブジェクトを列挙する

マシン上のすべてのIDispatchサポートオブジェクトを列挙したいと思います。現時点では、クラスIDまたはプログラムIDを知る必要がありますが、マシンを検査するために、IDispatchを実装するすべてのオブジェクトを列挙できるかどうかを知りたいと思います。

これも可能ですか?

どんな助けでも大歓迎です:)

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

windows - C++ で IDispatch v-table をフックする

IDispatchシステムに既に存在するインターフェイスの動作を変更しようとしています。これを行うために、私の計画は、実行時にオブジェクト v-table にフックし、代わりにカスタム フック メソッドを指すようにポインターを変更することでした。

これを機能させることができれば、既存のオブジェクトに新しいメソッドとプロパティを追加できます。良い。

IUnknown最初に、v-table for (from which inherits from)にフックしようとしましたが、IDispatchうまくいきました。ただし、エントリを変更しようとしてIDispatchもまったく機能しません。何も起こりません。コードは、フックがない場合と同じように機能します。

これがコードです。非常に単純なので、理解するのに問題はないはずです

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

interface - COM デュアル インターフェイス

COM のデュアル インターフェイスは、DispInterface または VTable メソッドを介してアクセスできるインターフェイスです。

2つの方法の違いは何ですか?

VTable は、子クラスでオーバーライドできる仮想関数を持つクラス階層を実装するときに、さまざまな関数へのポインターを保持する仮想テーブルであると考えました。しかし、これが COM のデュアル インターフェイスとどのように関連しているのかわかりません。

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

internet-explorer - オブジェクトタグのIEattachEventにより、メモリが破損します

次のイベントがある埋め込みIE7/8HTMLページ内にActiveXコントロールがあります[id(1)] HRESULT MessageReceived([in] BSTR id, [in] BSTR json)。Windowsでは、イベントはに登録されOCX.attachEvent("MessageReceived", onMessageReceivedFunc)ます。

次のコードは、HTMLページでイベントを発生させます。

アプリケーションベリファイアでgflags.exeを有効にすると、次の奇妙な動作が発生します。JavaScriptコールバックを実行しているInvoke()の後、何らかの理由でpvars[1]のBSTRがpvars[0]にコピーされます!?pvarsのdelete[]により、同じ文字列がdoubleで解放され、ヒープが破損します。

誰かがここで何が起こっているのか考えていますか?これはIEのバグですか、それともOCX実装内に欠けているトリックがありますか?

次のようなタグを使用する場合:

...奇妙なコピー操作は発生しません。

次のコードも、Fire_MessageReceived()の呼び出し元がBSTRを解放する責任があるため、問題ないようです。

ありがとう!