問題タブ [iconnectionpoint]
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# で COM イベントに接続 - マネージド サーバーとアンマネージド サーバーの両方をサポート
COM イベントに接続する必要がある C# コードを書いています。IConnectionPointContainer と IConnectionPoint の使用を次のように実装しました。
問題は、COM サーバーが実際に .Net (C# など) で実装されている場合、.Net がそれを作成した後、それを COM オブジェクトではなく .Net オブジェクトとして処理することです。.Net オブジェクトは IConnectionPointContainer インターフェイスを実装していないため、オブジェクトをそのインターフェイスにキャストしようとすると null が返されます。
どうすればこれを回避できますか?もちろん、IConnectionPointContainer を自分で C# COM サーバーに実装することもできますが、COM サーバーを実装する必要がある他の開発者に簡単に説明できる、より単純なソリューションが必要です。
PS COM サーバーは非 .Net (C++、Java) で実装される可能性があるため、IConnectionPointContainer を使用する必要があります。
ありがとう、インバー
delphi - DelphiでConnectionPointを実行するにはどうすればよいですか?
IDispatchインターフェイスを介してExcelと通信するDLLを作成しています。VBAApplication.Caller
から、を介してIDispatchポインタを描画するバリアントを渡します.pDispVal
。
私が知りたいのは、そのIDispatchポインターを介してインターフェースを照会する方法です。接続ポイントコンテナを設定し、そこからExcelへの接続ポイントを見つけます。最終的な目標は、ExcelのCalculateイベントに物事を結び付け、Excelデータを操作できるようにすることです。
delphi - 自動化オブジェクトがメモリリーク(TConnectionPoints)
メモリリークを引き起こすイベントサポート付きの自動化オブジェクトがあります。生成されたソースに付属するFConnectionPointsが解放されることはありません。デストラクタにFConnectionPoints.Freeを手動で追加すると、リークがなくなります。
FastMMBorlandMM.dllとFastMM_Fulldebugmode.dllを使用してDelphi7を使用しています。
再現する手順:
- 新しいActiveXライブラリプロジェクトを開始します
- 新しい自動化オブジェクトを追加します。Name=TestObject; 「イベントサポートコードの生成」にチェックを入れます
- TypeLibraryを開き、ITestObjectにメソッドを追加し、ITestObjectEventsにイベントを追加します
- 更新すると、コードが生成されます。
- .dprファイルの最初のユニットとしてShareMemを追加します
- このActiveXサーバーを保存、コンパイル、登録します([実行]メニュー)
- 新しいアプリケーションプロジェクトを開始します
- ShareMemを.dprファイルの最初のユニットとして配置します
- タイプライブラリユニットのインポート:手順6で作成したdllからユニットを作成し、[コンポーネントラッパーの生成]をオンにします。
- FormCreateに、次のコードを追加します。
コード:
次に、このアプリケーションをコンパイルして実行し、閉じます。メモリリークが報告されます。
質問:
これはDelphiコードテンプレートのバグですか、何か間違ったことをしていますか、それともFConnectionPointsを自分で解放することを目的としていますか(ヘルプには記載されていません)?
c# - .NET から COM サーバーのイベントにアタッチすると、E_ACCESSDENIED 例外が発生する
IConnectionPoint イベントを実装する C++/ATL COM サーバーがあります。私のクライアントは、イベントにアタッチする C# アプリケーションです。COM サーバーが SYSTEM サービスとして作成されると、クライアントはイベントに適切にアタッチできます。COM サーバーが LocalService サービス (推奨) として作成されている場合、イベントにアタッチすると E_ACCESSDENIED 例外が発生します。
COM サーバーが LocalService の場合にイベントを機能させるにはどうすればよいですか?
ありがとう。
c++ - IconnectionPointおよびEventHandlingとは何ですか
これが何であり、どのようにこれがEventHandlingIConnectionPoint
に接続されているかIConnectionPointContainer,IEnumConnectionPoints,IEnumConnections
を理解しようとしています。
次のような他の方法について説明しているMSDNおよびCodeProjectの記事を読んでくださいQueryInterface()
。
これらすべてのもの()がどのようIConnectionPointContainer,IEnumConnectionPoints,IEnumConnections
に相互に関連し、イベント処理を行っているのか理解できません。
COMオブジェクトでイベントをトリガーするsimpleClientを作成したいだけです。
単純で小さなコードのチャンクで物事が互いにどのように関連しているかを説明できる記事やコードスニペットがある場合は、役に立ちます。
初心者のCで最近開発を始めたことは言うまでもありません。
@sharptoothを編集する
行" typically your client will receive events and the COM object will trigger those events
。 "の場合
多くの記事から、私が理解したのは、その時点で接続ポイントを使用するとき
the client exposes a set of methods that the server uses
です。
TechRepublichの記事の一部を概説しています。
クライアントサーバーとシンクソース
したがって、標準のクライアントサーバーシステムでのCOMを使用した通常のプログラミングと接続ポイントの使用の主な違いは、標準のクライアントサーバーの場合、サーバーはクライアントが採用するメソッドのリストを公開し、接続ポイントの場合はクライアントは、サーバーが使用する一連のメソッドを公開します。
c# - COM イベントのハンドラーを設定するときの InvalidCastException
イベントを発生させるように設定されたアンマネージ C++ COM サーバーがあり、C# アプリからこれらのイベントを処理しようとしています。
ただし、ハンドラーをセットアップするときに InvalidCastException が発生します
スタック トレースは次を示します。
指定されたキャストは無効です。System.Runtime.InteropServices.ComTypes.IConnectionPoint.Advise (オブジェクト pUnkSink、Int32 & dwCookie) で MyCOMSource_EventProvider.add_MyCOMEvent (MyCOMSource_MyCOMEventHandler) で MyCOMSource_Event.add_MyCOMEvent (MyCOMSource_MyCOMEventHandler) で
このように独自の IConnectionPoint を設定しようとしました
wheremyEventNotifier
は、次のように定義されたクラスのオブジェクトです。
connectionPoint.Advise
しかし、スタックトレースで同じ InvalidCastException を取得します
指定されたキャストは無効です。System.Runtime.InteropServices.ComTypes.IConnectionPoint.Advise (オブジェクト pUnkSink、Int32 & pdwCookie) で
私はこれがクライアント側の問題であると想定しています。なぜなら、私が独自の ConnectionPoint を実行しようとしたときと、フレームワークにそれを実行させたときの動作が一貫しているためです。しかし、それがサーバー側の何かである場合:
COMサーバー側では、このように宣言しました
クラスにもCONNECTION_MAP
とCONNECTION_PART
マクロが配置されています。
どうすればこれをデバッグできますか?
c# - IConnectionPoint イベント ハンドラー内で WPF ボタンを表示するように設定する
私は C# と WPF プログラミングにかなり慣れていませんが、現在、この問題が頭を悩ませています。
プログラムの実行内容:プログラムは、顧客が自分の名前を入力できるテキスト ボックスのあるウェルカム画面を表示します。デバイスがワイヤレス LAN アクセス ポイントに近づき、正常に接続されると、このメイン ウィンドウの [開始] ボタンが表示されるはずです。
何が機能していないか:イベント ハンドラー内でボタンの可視性を設定しています。新しいスタイルは適用されません。さらに、可視性属性/プロパティ(?)を設定した後に他のコードを呼び出そうとすると、実行されません(visibを設定する直前にMessageBox.Showを配置すると、設定後に配置すると表示されます)プロパティ、このコードに到達することさえありません)。
コード:
これはボタン要素です:
これは、MainWindow.xaml.cs 内のイベント ハンドラーの登録です。
最後に、イベント ハンドラー:
それだけです - あなたが私を助けてくれることを願っています。
どうぞよろしくお願いいたします。
c# - IConnectPoint Unadvise を使用して通知の受信を正しく登録解除する方法は?
Mobile Broadband APIのドキュメントには、次のように書かれています。
次の手順では、通知を登録する方法について説明します。
1. IMbnInterfaceManager > オブジェクトで QueryInterface を呼び出して、IConnectionPointContainer インターフェイスを取得します。
2.返されたインターフェイスで FindConnectionPoint を呼び出し、IID_IMbnPinEvents を riid に渡します。
3. 返された接続ポイントで Advise を呼び出し、IMbnPinEvents を pUnk に実装する > オブジェクト上の IUnknown インターフェイスへのポインターを渡します。通知は、手順 2 で返された接続ポイントで Unadvise を呼び出すことによって終了できます。
最初の 3 つの手順を実行するコードがいくつかあり、MBN イベントに正常に登録されます。ただし、これらのイベントの受信から一時的に登録を解除する必要があります。
そのため、COM 例外で終了した最初の試行を 2 回行った後、次のコードを試しました (try/catch ブロックを使用)。
このコードを実行すると、MBN からエラーや例外が発生しません。ただし、イベント ハンドラーは登録解除されません。ログ ファイルで、MBN イベントが到着して処理されていることを確認できます。
私が欠けているものを誰か教えてもらえますか?ありがとうございました。
c# - null 接続ポイントを返す FindConnectionPoint メソッド
インターフェイスを使用して COM 相互運用イベント処理を行っているときに、私のコードにほぼ似ているこのPOSTを見つけました。
このトピックに関連する情報があれば教えてください。IConnectionPoints
ソースインターフェース(EventInterface)とのCONnectionPointにエラーがあればFindConnectionPoint
復帰することがわかっています。NULL
ソース インターフェイスをサポートする COM オブジェクトを QueryInterface メソッド (PS::HRESULT が S_OK を返す) で確認しました。
ここで発生しているエラーの種類は何ですか?
投稿を参照してください。私も同じ問題を抱えてる。
更新:
私の tlh ファイルのスナップショット>>
私のcppファイルのスナップショット>>
c# - COM Callable Wrapper を使用して、firebreath PluginAPI.cpp で発生した c# イベントを処理します。
Firebreath の JSCallBack はこの問題に役立ちますか?私が見たのは、firebreath (ネイティブ c++) プロジェクトで発生したイベントのみを処理するためです。私はここにいますか? IConnectionPoint インターフェイスの概念を使用して、イベント シグネチャを含む発信インターフェイスとの接続を確立しました。私のコードはこの投稿によく似ています。
また、クライアントとの COM の接続に関するこの情報も見つけました。ここで質問があります: 私の PluginAPI クラスは、この Outgoing インターフェイスを PluginAPI.h ファイルに実装する必要がありますか? このような、
もしそうなら、それは2つのエラーを引き起こしています
抽象クラスをインスタンス化できないことを伝えます。make_shared.hpp のこれらの行を教えてください
template< class T, class A1, class A2 > boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
/li>
2.alignment_of.hppへ
ここ 2 日間立ち往生。また、これに対する回避策。