3

レガシー ソフトウェアへのインターフェイスを提供するために社内で開発された C# ライブラリがあります。時間の経過とともに要件が増大し、現在、このインターフェイス ライブラリに COM 可視性を追加して、MS Office アプリケーションの VBA などからアクセスできるようにしています。

更新 3: 「既存の設計」テキストにもう少し詳細を追加しました。

既存の設計:インターフェイス ライブラリをInterface.dll と呼びましょう。これは、このInterface.dllの依存関係であるいくつかのバックエンド /dll を含むファサード パターンです。それらを、MyTypeLib.dll、MyHelper1.dll、MyHelper2.dll、およびいくつかのヘルパーと呼びましょう 。上記のすべての .dll は、私のソリューションでは個別のライブラリ プロジェクトです。

私のアプローチは
、COM 可視クラスを持つ新しいライブラリを開発することでした。私は次のようなことをしました:

更新 1、2: インターフェイスのサンプル コードを追加しました

[Guid("CE3750B7-DE31-4635-A69C-110B1271B363")]
public interface ICOMVisibleClass
{
   ...
   ...
}

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
[Guid("A023101A-D9B3-4A24-AAE4-B3CFEDA04BAF")]
public class MyCOMVisibleClass : ICOMVisibleClass
{
   ...
   ...
}

Interface.dllからメソッドを選択的に呼び出し、これらの選択されたメソッドを COM で表示できるようにします。上記のクラスがMyCOMVisibleClassLib.dllを生成するとしましょう。RegAsm.exe を使用してこのライブラリを登録し、MyCOMVisibleClassLib.tlbファイルを生成しました。

この実装をテストするために、MS Excel 2010 を使用することにしました。VBA エディターを開き、MyCOMVisibleClassLib.tlbへの参照を追加しました。コードでは、MyCOMVisibleClass のすべてのメソッドを確認できるようになったので、.....

このコードを実行したところ、「実行時エラー -2146233088 (80131500)。MyTypeLib.dll が見つかりません」というメッセージが表示されました。Assembly Binding Log Viewer を使用してこのエラーの詳細を確認したところ、MS Excel がこれ (MyTypeLib.dll) を探していることがわかりました。 ) 実際にこのファイルがある場所を除くすべての場所。このファイルを Program Files の下の Excel インストール フォルダーにコピーすると、Excel は次の依存関係 (MyHelper1.dll など) について比較します。すべてのdllをExcelインストールフォルダーにコピーした後、すべて問題ありませんでした。しかし、これは私が探している解決策ではありません。

質問:

  1. COM にいくつかのメソッドを開くための私のアプローチは正しいですか?
  2. 登録が必要なのはMyCOMVisibleClassLib.dllだけだと思います。私はそう考えるのが正しいですか?
  3. MS Excel のインストール フォルダーにコピーすることなく、すべての依存関係 ( MyTypeLib.dll、MyHelper1.dll、MyHelper2.dll )を Excel で検索するにはどうすればよいですか?

また、これを始める前に知っておくべき基本的なことが欠けていると思いますが、それを理解できないようです。

どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

4

私はついに問題を回避しました。これが私がしたことです:

  1. 登録が必要なものを含むすべてのアセンブリに厳密な名前を付けて署名しました。
  2. RegAsm を使用して .tlb ファイルを生成しました。ここに問題があります - 私の場合のように 64 ビット バージョンのソリューションを展開する場合 - 私は 64 ビット MS Excel にこのインターフェイスを使用するつもりでした - 「C:\Windows」の下にある RegAsm の 64 ビット バージョンを使用する必要があります\Microsoft.NET\Framework64" を実行して .tlb ファイルを作成します。32 ビット ソリューションの場合、「C:\Windows\Microsoft.NET\Framework」フォルダーの RegAsm を使用します。
  3. MyCOMVisibleClassLibプロジェクトからの出力、そのすべての依存関係、および MyCOMVisibleClassLib.tlb ファイルを含めるために、VS2010 でセットアップ プロジェクトを作成しました。

.tlb ファイルを除くこれらすべてのファイルを GAC にインストールできます。そこで、アプリケーション フォルダ (Program Files の下) にインストールすることにしました。

セットアップを実行した後、すべてがうまくいき、Excel はファイルを正しく見つけたようです。

于 2013-09-25T07:38:32.497 に答える