問題タブ [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# COM オブジェクト
COM を介して動的インターフェイスを提供するCOM 可視C# クラス、たとえばを構築したいと考えています。DynamicComponent
内部的に、このクラスはデリゲートのディクショナリを維持します。
クライアント コードは VBA になります。
これが私が素朴に想像するワークフローです。
- ユーザーがTLBを参照する Excel/VBA エディタから
- ユーザーが新しいインスタンスを作成します
DynamicComponent
(少なくとも、Excel/VBA によって提供されるスタブを取得します) - Excel/VBA COM インフラストラクチャは、 IDispatchインターフェイスを介してコンポーネントにクエリを実行します
- コンポーネントは次のような disp-ids マップで応答します
["GetTheAnswer" -> 1, "Add" -> 2]
- ユーザーはオートコンプリートの恩恵を受けることができ、次の 2 つの方法が表示されます
GetTheAnswer
。Add
- ユーザーは、静的に定義されているかのように、これらのメソッドのいずれかを呼び出します
私の最初の質問:それは可能ですか?
いいえの場合:なぜですか?
はいの場合:どのように?
私が COM について知っていることから、可能であれば、IDispatch COM インターフェイスは私の親友です。
さらに、私が理解していることから、.Net 4のICustomQueryInterfaceインターフェイスも大いに役立ちます。
しかし、最近の COM は最先端ではありません ;) コード サンプルのようなリソースを見つけるのは非常に困難です。
この興味深いサンプルを見つけました: https://clrinterop.codeplex.com/releases/view/32350 ICustomQueryInterfaceインターフェイスを使用して COM 集約を実装します。
ただし、動的ではなく、静的に定義された型とインターフェイスに基づいています。
どんな助けでも大歓迎です。
ありがとう。
c++ - Free Pascal の ActiveX メソッドでの VARIANT* パラメータの使用
Free Pascal プロジェクトで ActiveX-Object を使用したいのですが、ドキュメントから、1 つのメソッドが次のように宣言されていることがわかっています。
vVariant には、呼び出し後に結果 (整数または浮動小数点値) が含まれます。
LazActiveX の「タイプ ライブラリのインポート」関数は、これを次のように変換しました。
OleVariant については少し驚きました。返されるのは単純なデータ型だけだからです。また、v: OleVariant で Fetch(v) を呼び出すと、EOleSysError (型の不一致) が発生します。
TLBでこのメソッドを正しく宣言する方法、またはデータにアクセスする方法を誰かに説明してもらえますか? 残念ながら、私は Fetch() のソースを持っておらず、このようなもののいくつかは NDA でカバーされています...
delphi - AccessibleObjectFromEvent.call によって idispatch のメンバーを取得する idispatch インターフェイスが失敗したのはなぜですか
ms-word のハンドルを取得し、AccessibleObjectFromEvent を使用して IDispatch (late bingding) を取得します。次に、そのプロパティまたはメソッドを呼び出したいのですが、失敗します。</p>
しかし、C# を使用しても問題ありません。
遅延バインディングを使用してExcelインスタンスを取得するには?
このようなコード。
c++ - DispEventAdvise を使用して複数のオブジェクトのイベントを登録する
「DispEventAdvise」から継承するクラスがあります(outlook2010用ですが、重要ではありません):
ここで、item_2010_event_handler の 1 つのインスタンスを登録して複数のオブジェクトからイベントを取得したいので、DispEventAdvise() を複数回 (オブジェクトごとに 1 回) 呼び出しますが、2 回目から DispEventAdvise() を呼び出すと、「不明なエラー」例外が発生します。関数から。
サポートされていない可能性はありますか?そうでない場合は、なぜですか?
可能であれば、何が欠けていますか (明らかに、必要に応じてコードを追加します...)?
c++ - 「メンバーが見つかりません」というメッセージが表示された Windows MessageBox。生成されますか?それを傍受することは可能ですか?
GUI を備えた MFC ベースの Windows アプリケーションがあります。これは C++ で記述されており、多くの COM オブジェクトがあります。「HelloWorld」としましょう。
ユーザーからバグ レポートが送られてきました。特定のユーザー アクションに応答して、MessageBox が表示されることがあります (次の画像では、タイトル バーのキャプションを削除しています)。
1) MessageBox のタイトル バー キャプションは、コード内でその文字列を探していると、 (アプリケーションのソース ファイル内で)HelloWorld
によって識別されるリソース文字列であると思われます。以下は、ソース ファイルの関連セクションです。AFX_IDS_APP_TITLE
.rc
.rc
2) 英語の Windows 7 では、MessageBox のメッセージは「Member not found」です。
3) 異なる言語の Windows 7 では、メッセージは適切な言語に翻訳されます。
問題はここで説明されていると思います
HOWTO: Troubleshoot "Member Not Found" 0x80020003 Errorで、エラーに関連してい
DISP_E_MEMBERNOTFOUND
ます。実際にユーザーサイトで問題を解決しました。
しかし、まだ解決されていない別の問題があり、それはユーザー エクスペリエンスの問題です。バグ レポートを送ってくれたユーザーはプログラマーではなく、「メンバー関数」などの表現における「メンバー」の意味を知らず、そのため、「メンバー」という言葉には多くの意味があるため (少なくとも英語とイタリア語では)、ユーザーはこのメッセージに少し気分を害しました。
アプリケーションのソース コードを確認したところ、アプリケーションによって MessageBox が生成されていないようです。MessageBox を傍受して別の MessageBox を表示するために、その MessageBox がどのように生成されるかを知りたいのですが、それは可能ですか?