2

私は、Excel にプラグインする 2 つのテクノロジを持っています。

1 つは、IDTExtensibility2 インターフェイスを実装する COM アドインです。もう 1 つは、Excel-DNA を介して実装される RTD サーバーです。

これらのオブジェクトは両方とも、Excel によってインスタンス化されます。それぞれが実行時に 3 番目のオブジェクトにアクセスして、データを取得して Excel にプッシュする必要があります。

このオブジェクトを Excel プラグインに渡すことができないため、それぞれが同じインスタンスを共有できることを期待してシングルトンにしました。

残念ながら、コードを実行すると、それぞれが他方が作成したシングルトン オブジェクトのインスタンスを認識しません。

両方のアドインが同じオブジェクトを参照するようにするにはどうすればよいですか?

両方のアドインを残す必要があり、プロセス間通信の設定には行きたくないと仮定して作業を進めましょう。

TL/DR 2 つの Excel プラグインは 3 番目のオブジェクトを共有する必要がありますが、各 Excel プラグインは他のプラグインが作成した 3 番目のオブジェクトのインスタンスを認識しないため、3 番目のオブジェクトをシングルトンにすることはできません。

そのような問題の解決策は何ですか?

4

1 に答える 1

1

アドインは別の AppDomains に読み込まれています。1 つのオプションは、COM アドインを Excel-DNA アドインに統合することです。これは次のように簡単です。

  1. COM アドイン コードを Excel-DNA プロジェクトに追加します。
  2. アドイン クラスをExcelComAddIn(の代わりにIDTExtensibility2)から派生するように変更します。
  3. AutoOpenそのクラスをviaにロードしますExcelComAddInHelper.LoadComAddIn(...)

そうしないと、ある種の AppDomain 間通信が必要になります。Object読み込まれたアドインに対応するオブジェクトのプロパティに設定する Marshal-By-Reference オブジェクトを設定しCOMAddIn、Excel-DNA アドインから COM インターフェイスを使用してそれを取得できます。

于 2013-03-09T12:38:41.130 に答える