問題タブ [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++ DLL が C# DLL を呼び出すためのオプションは何ですか?
C# クラス ライブラリで関数を呼び出す (値を渡す、値を返す) 必要がある C++ DLL があります。
C# DLL に COM インターフェイスを提供し、IDispatch を使用して C++ から呼び出す唯一のオプションはありますか?
これが最善の方法ですか?
c++ - DISPPARAMS から適切な IDispatch を取得できますか?
適切なIDispatchポインターを取得してから、それをCMyDispatchポインターにキャストし、後でそれを処理したいと考えています。
つまり、JavaScriptで次のようなことをしたい:
xとyはCMyDispatchのインスタンスです。
CMyDispatchは次のように javascript に返されます。
DISPATCH_PROPERTYPUTフラグを指定したCMyDispatch.Invoke() では、y値を保持するCMyDispatchインスタンスを取得したいと考えています。
次のコードを使用すると、pDispatchがガベージに設定されます。
適切なCMyDispatchポインターを取得するにはどうすればよいですか? ありがとうございました。
c++ - 「純粋な」IDispatchインターフェイスにはプロキシ/スタブDLLが必要ですか?
..アウトプロセスサーバーの場合、またはプロキシ/スタブを登録せずにディスパッチインターフェイスを呼び出すことはできますか?
問題のインターフェースは非常に高レベルであるため、パフォーマンスは問題ではなく、すべてを登録なしにすることができました。これは大きなプラスです。
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 でこのプロセスの明らかな「再利用」を無効にする方法はありますか?
object - すべてのプロパティに応答するIDispatchオブジェクト?
すべてのプロパティの値を返すIDispatchオブジェクトを作成したいと思います。「foo」を要求すると、何かが返されます。「バー」は何かを返します。「faid1jhgi31jifj」も。
ポインタはありますか?
c++ - マシン上のすべてのIDispatch実装オブジェクトを列挙する
マシン上のすべてのIDispatchサポートオブジェクトを列挙したいと思います。現時点では、クラスIDまたはプログラムIDを知る必要がありますが、マシンを検査するために、IDispatchを実装するすべてのオブジェクトを列挙できるかどうかを知りたいと思います。
これも可能ですか?
どんな助けでも大歓迎です:)
windows - C++ で IDispatch v-table をフックする
IDispatch
システムに既に存在するインターフェイスの動作を変更しようとしています。これを行うために、私の計画は、実行時にオブジェクト v-table にフックし、代わりにカスタム フック メソッドを指すようにポインターを変更することでした。
これを機能させることができれば、既存のオブジェクトに新しいメソッドとプロパティを追加できます。良い。
IUnknown
最初に、v-table for (from which inherits from)にフックしようとしましたが、IDispatch
うまくいきました。ただし、エントリを変更しようとしてIDispatch
もまったく機能しません。何も起こりません。コードは、フックがない場合と同じように機能します。
これがコードです。非常に単純なので、理解するのに問題はないはずです
interface - COM デュアル インターフェイス
COM のデュアル インターフェイスは、DispInterface または VTable メソッドを介してアクセスできるインターフェイスです。
2つの方法の違いは何ですか?
VTable は、子クラスでオーバーライドできる仮想関数を持つクラス階層を実装するときに、さまざまな関数へのポインターを保持する仮想テーブルであると考えました。しかし、これが COM のデュアル インターフェイスとどのように関連しているのかわかりません。
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を解放する責任があるため、問題ないようです。
ありがとう!