問題タブ [connection-points]
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++ - コンテナーが複数の接続をサポートしているかどうかを確認する方法は?
- シンククラスを実装- COM サーバーからイベント通知を受け取る
- IDispatchから派生したイベント インターフェイス
IConnectionPoint::Advise呼び出しがE_NOTIMPLを返すという問題があります。これは、接続ポイントでMSDNという1 つの接続しか許可されていないことが原因である可能性があります。
ノート:
- COM サーバーはアウトプロセスです
- 純粋な C++ 実装
編集:
S8.tlh : Win32 タイプ ライブラリ S8.tlb に相当する C++ ソース:
Class Sinkの実装- イベント通知を処理するため:
編集:
シンククラスでのIUnknownインターフェイスの実装
質問:
- コンテナーが複数の接続をサポートしているかどうかを確認する方法は?
- さらに情報が必要な場合は、それに応じてコメントしてください。
c++ - 説明どおりにイベント通知が受信されない
問題:
イベント通知(COM オブジェクト - サーバーから) は、シンク (クラス) 実装にリストされているように受信されません。
1 つのイベント通知(Event_one) が受信されますが、その他はそれに応じて受信されません
順序が変更された場合- IDispatch::Invoke では、次のようになります。
Event_one
に交換された場合Event_two
、Event_two
通知を受け取りましたがEvent_one
、それに応じて他の人は無視されました
質問:
- IDispatch::Invoke または QI を実装するためのより良い方法は?
- 間違ったロジックやアプローチを使用していませんか?
注:
- MFCなし
- ATL なし
- 純粋な C++
- メッセージ ループの使用: GetMessage()
- STAモデル ( Coinitialize() )
- IDispatch::Advise の呼び出しが成功しました(呼び出しS_OKからの HRESULT )
- 上記の後、COM オブジェクト メソッドは通常どおり呼び出します (インターフェイス ポインターを使用)
- Advise への 1 回の呼び出し
- MIDL コンパイラから生成されたタイプ ライブラリ
たとえば(例):
IDispatch::Invokeの図-シンク クラスから取得:
QueryInterfaceの図:
c++ - ATL 接続ポイントを機能させることができません
ATL を使用して COM コンポーネントを作成しようとしており、VB クライアントのイベントを発生させたいと考えています。多数のチュートリアルを見つけましたが、それらはすべて詳細が異なるようであり、実用的なソリューションを生成するものはありません。これが私がやっていることです:
(Visual Studio 2008 を使用):
- 新しい ATL DLL プロジェクトを作成します。私はそれを呼んだ
ATLEventTest
。 - クラス ビュー: を右クリックし
ATLEventTest
、新しい ATL シンプル オブジェクト クラスを追加しました。これを と呼び、 、 などMyObject
を生成しました...CMyObject
IMyObject
このオブジェクトは以下で作成されました: a) アパートメント スレッディング b) アグリゲーション c) デュアル インターフェイス d) ISupportErrorInfo e) 接続ポイント
を右クリックし
CProxy_IMyObjectEvents<T>
、「関数の追加」をクリックしました- 関数の戻り値の型は void で、名前
someEvent
は で、引数はint testParam
. - 再構築します。
(この時点で、どこかに「Implement Connection Point」が表示されるはずです。表示されません...) - を右クリックしました
CMyObject
。「接続ポイントを追加」 _IMyObjectEvents
' ' をリストに移動しました。- 私のソリューションでコード検索を行いました。
someEvent
どこにも見つからない! someEvent
機能を再度追加しました。現在は、ATLEventTest_i.h にあります。fire_someEvent(...)
私のコードを呼び出すことができるはずですが、できません。
これは、これを機能させようとして私を狂気に駆り立てています。誰かが私が間違っていることを見ることができれば、修正、ヒント、ハックなどをいただければ幸いです。
この時点で、私はウィザードを台無しにして、c++ と idl を直接変更しようとしているだけだと言いたくなりますが、それはそれほど良いことではないかもしれないと感じています :(
visual-c++ - VC++ 6 で新しい接続ポイントを作成しますか?
私は VC++ 6 で ATL/COM プロジェクトを持っています。これまでイベントを発生させるように定義されたことのない既存のクラスで、イベントを発生させたいと考えています。これを行うには、クラスは「接続ポイント」を実装する必要があります。
これらのイベントは、これまで発生したクラスがないタイプであるため、既存の接続ポイントを再利用するのではなく、新しい接続ポイントを作成する必要があります。
クラスに接続ポイントを実装する方法を知っています。クラス ビューでクラスを右クリックし、[接続ポイントの実装] を選択して、表示されるリストから適切な接続ポイントを選択します。
新しい接続ポイントを実装するために新しい ATL クラスに関連付けられている限り、新しい接続ポイントを作成する方法を知っています - クラスを作成するときに「サポート接続ポイント」をチェックしてください。
しかし、それを実装する新しい ATL クラスを作成せずに、新しいコネクション ポイントを作成する方法がわかりません。
IDL を変更して、既存の接続ポイントの定義に似たものを含めました。
(明らかに、「何とか何とか」ではなく、本当のuuidを持っています)。
これを実行すると、_IBlahEvents インターフェイスがクラス ビューに表示されます。しかし、_IBlahEvents を実装する ATL クラスを右クリックして [接続ポイントの実装] を選択すると、_IBlahEvents が既存の接続ポイントの一覧に表示されません。
すべてのクリーニングと再構築を含め、再コンパイルしました。
私は何が欠けていますか?
ありがとう。
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を解放する責任があるため、問題ないようです。
ありがとう!
c++ - 接続ポイントメソッドの再生成
接続ポイントインターフェイス_IPlayerEventsを作成しました。
いくつかのメソッドを追加しました
プロジェクトをビルドしましたが、VS2008はCProxy_IPlayerEventsクラスにコードを生成しました。
ここで、_IPlayerEventsインターフェイスにさらにメソッドを追加しました
ビルドすると、OnMessage関数のCProxy_IPlayerEventsクラスにコードが追加されません。VS2008で次のものが生成されると予想していました。
可能であれば、CProxy_IPlayerEventsを手動で更新する必要はありません。
VS2008にCProxy_IPlayerEventsクラスを再生成させるにはどうすればよいですか?
c++ - IEがActiveXイベントをリッスンしないのはなぜですか?
IEによって処理されるイベントを発生させるlongrunメソッドを使用してActiveXコントロールをHTMLページに配置しました。
m_vec.GetSize() == 0
IEがActiveXに接続しないため、起動しません。
サイトはローカルホストであり、信頼済みサイトにあり、セキュリティレベルは最小に設定されています。
HTML
IDL
С++継承リスト:
COM_MAP
CONNECTION_POINT_MAP
CATEGORY_MAP
ここで何が問題になっていますか?IEが接続ポイントインターフェイスに接続しないのはなぜですか?
一時的な解決策
私はゲームを放棄し、メソッドパラメータ(タイプ)<script for event>
としてjavascriptコールバック関数を渡し始めましたIDispatch*
c# - 不明な com オブジェクト インターフェイス (接続ポイントなど) から GUID を取得するには?
COM経由で利用できるサービスを実行しています。を使って接続できActivator
ます。
COMライブラリを接続します
次に、インスタンスでオブジェクトを取得します
これは実際にIConnectionPointContainer
いくつかの接続ポイントがあり、1 つを取得するには
cpp atl で正しく覚えていれば、__uuid(IHelloWorld)
問題は、コンテナ内の「IHelloWorld」インターフェイス(接続ポイント)のガイドを取得する方法です。
c++ - Microsoft Word コネクション ポイント シンクの例 / MFC に関する問題
MFC を使用して、サード パーティの COM コンポーネント用のコネクション ポイント シンクを実装しようとしています。以前にいくつかの COM コンポーネントを開発したことがありますが、コネクション ポイント シンクについてはあまり詳しくありません。
https://support.microsoft.com/en-us/kb/183599
それは私がやろうとしていることと最も似ているように見えました。説明どおりに例を再現しようとしました。私の MS Word のバージョンは 2010 ですが、参照されているインターフェイスはまだ有効であるように見えます。私は忠実に指示に従い、文字通りコードを自分のプロジェクトにカット アンド ペーストし、幅広の文字列を調整するだけで済みました。コンパイル後、単語アプリを起動して終了することはできますが、接続ポイント イベントを受信しません。おそらく問題は関数 dispid にあると考えたので、DISP_FUNCTION_ID エントリを Dispatch Map に追加しようとしました。しかし、これは oledisp1.ccp の 549 行目のアサーションにつながり、CCmdTarget::GetStackSize 関数にあることがわかります。
これはばかげていると確信していますが、うまく動作させることができません。誰かが例に欠けているものを理解するのを手伝ってもらえますか? ありがとう。