0

私はExcelアドインを持っており、非常に多くのクラスモジュールを追加しているため、非常にかさばっています。MS Officeスイートの他のアプリで再利用できるように、タイプライブラリまたはCOMパッケージに変換したいと思います。

アドインをクラスライブラリプロジェクトとしてVisualStudioに移植しましたが、ExcelAutomationはコンパイルされた.dllファイル内のクラスを認識しません。直感的には、コードにマニフェストやインターフェイスなどが必要になると思います。

OLEオートメーションで使用するクラスのメソッドとプロパティを公開するには、何を知っておく必要がありますか?

4

2 に答える 2

1

マニフェストというフレーズを使用したため、VS 6.0 と比較して、.net 開発プラットフォーム VS2003、VS2005、または VS2008 を使用してこの DLL をアセンブルしていると思います。

このリンクは、COM コンポーネントとして使用する .NET アセンブリを登録するために必要な一連の詳細な手順を提供します。

この記事で触れていないことの 1 つは、私が日常的に行っていることは、独自の GUID を作成することです。[ツール] メニューの [GUID の作成] 項目を使用して、COM 用に公開するクラス、インターフェイス、および列挙型の上に挿入します。

[Guid("3838ADC1-E901-4003-BD0C-A889A7CF25A1")]
public interface IMyCOMClass  {
    void MyMethod(); 
}

[Guid("476BDEB6-B933-4ed5-8B86-7D9330A59356"),
ClassInterface(ClassInterfaceType.None)]
public class MyCOMClass : IMyCOMClass {
    public void MyMethod() { 
        //implementation here
    }
}

2 番目に行うことは、クラスによって実装される COM 部分に別のインターフェイスを使用することです。これを行う理由は、インターフェースが変更されたときの COM の壊れやすさに関係しています。DLL 地獄を考えてみてください。

これが役に立てば幸いです、ビル。

于 2008-09-24T22:42:52.913 に答える
1

(.NET プロジェクトであると仮定)

GUID をインターフェイスとクラスに追加するだけでなく、それらを ComVisible 属性でマークする必要があります (アセンブリ全体をマークしていない場合)。また、管理されていないクライアントで参照するために、tlbexp.exe を使用してメタデータを COM タイプ ライブラリとしてエクスポートする必要があります。

于 2008-09-24T22:47:44.667 に答える