レガシー ソフトウェアへのインターフェイスを提供するために社内で開発された 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インストールフォルダーにコピーした後、すべて問題ありませんでした。しかし、これは私が探している解決策ではありません。
質問:
- COM にいくつかのメソッドを開くための私のアプローチは正しいですか?
- 登録が必要なのはMyCOMVisibleClassLib.dllだけだと思います。私はそう考えるのが正しいですか?
- MS Excel のインストール フォルダーにコピーすることなく、すべての依存関係 ( MyTypeLib.dll、MyHelper1.dll、MyHelper2.dll )を Excel で検索するにはどうすればよいですか?
また、これを始める前に知っておくべき基本的なことが欠けていると思いますが、それを理解できないようです。
どんな助けでも大歓迎です。前もって感謝します。