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

delphi - DelphiでExcel用のDLLを作成する

TurboDelphi2006を使用しています。

DLLは、VBA/DLLの組み合わせの一部としてExcel内から呼び出されます。

問題の最初の部分は、現在のExcelセッションへの参照をDLLに渡す方法を見つけようとすることです。私が見た他のほとんどのコードは、現在のコードとは別のExcelのインスタンスを起動したことです。

IDispatchオブジェクトのインスタンスを作成してから何かをIDispatchオブジェクトのメソッドに渡すC++コードを見たことがありますが、C++についてはIDispatchあまり詳しくありません。

何か案は?

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

delphi - DelphiでConnectionPointを実行するにはどうすればよいですか?

IDispatchインターフェイスを介してExcelと通信するDLLを作成しています。VBAApplication.Callerから、を介してIDispatchポインタを描画するバリアントを渡します.pDispVal

私が知りたいのは、そのIDispatchポインターを介してインターフェースを照会する方法です。接続ポイントコンテナを設定し、そこからExcelへの接続ポイントを見つけます。最終的な目標は、ExcelのCalculateイベントに物事を結び付け、Excelデータを操作できるようにすることです。

0 投票する
6 に答える
16658 参照

c# - C# .NET は IDispatch レイト バインディングをサポートしていますか?


質問

私の質問は: C# は遅延バインディング IDispatch をネイティブにサポートしていますか?


顧客がインストールしたバージョンと互換性を保ちながら、Office を自動化しようとしているふりをします。

.NET の世界では、Office 2000 をインストールして開発した場合、すべての開発者とすべての顧客は、現在から最後まで Office 2000 を使用する必要があります。

.NET 以前の世界では、COMを使用して Office アプリケーションと通信していました。

例えば:

1) バージョンに依存しない ProgID を使用する

これは次のように解決されます。

次に、COM を使用して、これらのクラスの 1 つをオブジェクトにインスタンス化するように要求します。

そして今、私たちは競争に出かけています - アプリケーション内から Excel を使用できるようになりました。もちろん、本当にオブジェクトを使用したい場合は、何らかの方法でメソッドを呼び出す必要があります。

私たちの言語に翻訳されたさまざまなインターフェース宣言を手に入れることができました。このテクニックは優れています。

  • 早期バインディング
  • コードインサイト
  • コンパイル型の構文チェック

いくつかのコード例は次のとおりです。


しかし、インターフェイスを使用することには欠点があります。言語に変換されたさまざまなインターフェイス宣言を把握する必要があります。そして、すべてのパラメーターを指定する必要があるメソッドベースの呼び出しの使用に行き詰まっています。

これには、現実の世界で、喜んであきらめるほどの欠点があることが証明されています。

  • 早期バインディング
  • コードインサイト
  • コンパイル時の構文チェック

代わりにIDispatchレイト バインディングを使用します。

Excel の自動化は VB スクリプト用に設計されているため、多くのパラメーターを省略することができます。パラメーターなしではオーバーロードがない場合でも省略できます。

注: Excel の例と、IDispatch を使用する理由を混同しないでください。すべての COM オブジェクトが Excel であるとは限りません。一部の COM オブジェクトは、IDispatch 以外ではサポートされていません。

0 投票する
4 に答える
13073 参照

c# - .NET2.0 C# 相互運用性: C# から COM コードを呼び出す方法は?

前回の開発環境では、COM オブジェクトのメソッドを呼び出して、COM と簡単に対話することができました。C# スタイル コードに変換された元のコードを次に示します (元の言語をマスクするため)。

ここで、マネージ コードから COM との相互運用を試みる、面倒で骨の折れるプロセスが始まります。

PInvoke.net には既にIWebBrower2 translationが含まれており、その関連部分は次のとおりです。

COM クラスを作成しました。

それでは、実際の C# トランザクションの時間です。

注意深い読者は、IWebBrowser2.Document が遅延バインド IDispatch であることに気付きます。私たちは Visual Studio 2005 を使用し、.NET 2.0 を私たちのマシンと顧客のマシンで使用しています。

では、あるレベルでレイト バインド IDispatch のみをサポートするオブジェクトのメソッドを呼び出す .NET 2.0 メソッドは何でしょうか?

C# から IDispatch を使用するために Stack Overflow をすばやく検索すると、この投稿が表示され、私が望むことは .NET では不可能であると書かれています。

C# .NET 2.0 から COM を使用することは可能ですか?


問題は、C#/.NET で使用したい、受け入れられているデザイン パターンがあるかどうかです。Internet Explorer をアウト プロセスで起動し、HTML コンテンツを提供しますが、一時ファイルは使用しません。

却下された設計案は、WinForm で Internet Explorer をホストすることです。

受け入れ可能な代替手段は、一時ファイルを使用せずに、表示する HTML を指定して、システムに登録された Web ブラウザーを起動することです。

つまずきは、.NET の世界で引き続き COM オブジェクトを使用することです。具体的な問題には、C# 4.0 を必要とせずに IDispatch への遅延バインディング呼び出しを実行することが含まれます。(つまり、.NET 2.0 を使用している場合)

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

c++ - C++ unmanaged を使用して Power Point の実行中のバージョンを取得するにはどうすればよいですか?

Power Point (2003 および 2007) で管理されていない C++ を使用しています。

IDispatch で実行中のバージョンの Power Point (2003 または 2007) を入手するにはどうすればよいですか?

ありがとう、どんな助けでも素晴らしいでしょう。

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

c++ - C++ アドインから PowerPoint 2007 を検出する方法は?

C++ アドインを介してアドインが PowerPoint 2007 にあるかどうかを検出する必要があります。PowerPoint オブジェクト モデルは Application.Version を公開していますが、これは動作するはずですが、IDispatch でこれを使用する方法については十分に知りません。

C++ アドインから PowerPoint 2007 を検出する方法は?

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

com - COM / OLE / ActiveX / IDispatch の混乱

これらの用語の違いに頭を悩ませることはできません。

COM と ActiveX は同義語ですか?

ActiveX オブジェクトは、IDispatch を公開する単なる COM オブジェクトですか?

多くの古い MSDN ページでは、COM コンテキストなしで IDispatch について言及しています。それには別の歴史があり、そのライフサイクルの後半でCOMの「傘」の下に導入されたばかりですか?

OLE はどこに適合しますか? MFC のネーミングと MSDN における一般的な (かなりの) 存在は、単なるレガシーですか?

ウィキペディアはある程度の洞察を提供しますが、多くはありません。詳細なリファレンスは見つかりませんでした。

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

c++ - MSHTML IWebBrowser2 - シンク ページ イベントにより、キーストロークが失われますか?

MSHTML を使用しているアプリケーションに少し問題があります。件名に記載されているように、速く入力すると奇妙なキーストロークの欠落動作が発生することを除いて、すべてが機能しています。イベントをシンクするために使用する方法と関係があるのではないでしょうか?

詳細: 私のアプリケーションは、Visual Studio 2005 の C++ および MFC で記述された別個のプログラムです。プログラムは、現在実行中の (独立した) Internet Explorer のインスタンスにアタッチされ、IWebBrowser2インターフェイスへのポインターを取得し、それを type のオブジェクトに渡しますCCmdTarget

このクラスは、ブラウザーで何が起こっているかを追跡します。次のコマンドでブラウザー イベントをシンクします。

をコメントアウトするとAfxConnectionAdvise、キーストロークが失われることはありませんが、イベントは発生しなくなります。そのままにしておくと、イベントはシンクされますが、すばやく入力すると、時折キーストロークが失われます。

イベント ( 、接続ポイント) に接続する方法がいくつかあることは知っていますがAtlAdvise、これは私が機能させることができた唯一の方法でした。

どんな提案も素晴らしいでしょう!