0

Visual Studio 2008 Express を使用して VB6 dll を VB.Net に変換しています。同じ .dll を使用して、Excel-DNA 経由で Excel と統合するだけでなく、COM 経由でも使用できるようにしたい (VBScript と VBA から呼び出すことができる必要がある)。

アセンブリを署名しないままにしておくと、すべての ExcelDNA 機能にアクセスできますが、COM アクセスはできません。

厳密な名前でアセンブリに署名すると、.dll をビルドしようとすると、次のエラーが発生します。

アセンブリを出力できません: 参照されたアセンブリ 'ExcelDna.Integration' に厳密な名前がありません

私のオプションは何ですか?

4

2 に答える 2

4

[ComVisible] アセンブリに厳密な名前を付ける必要はありません。GAC にインストールする場合にのみ必要です。厳密には必要ではありませんが、DLL 地獄と戦うのは悪い考えではありません。/codebase オプションを使用して Regasm.exe に登録する必要があります。Express エディションではオプションが欠落している可能性がありますが、Visual Studio では既にそれが自動的に行われます。

2 番目の問題を修正することも難しくありません。Codeplex からダウンロードできるソース コードから Excel-DNA ソリューションを再構築するだけです。

于 2012-01-27T23:00:02.310 に答える
2

Excel-DNAには、.NET クラスを COM に直接公開するオプションがあるため、通常の COM クラスとして VBA から直接使用できます。

これを行うには、クラスが ComVisible である (またはアセンブリ全体が ComVisible である) 必要があり、次のように、.dna ファイルで ExternalLibrary を ComServer='true' としてマークする必要があります。

<DnaLibrary RuntimeVersion='v4.0' />
  <ExternalLibrary Path='MyAddIn.dll' ComServer='true' />
</DnaLibrary>

次に、登録のオプションがいくつかあります。「Regsvr32.exe MyAddInDna.xll」を呼び出すか、アドインの AutoOpen で ExcelDna.Integration.ComServer.RegisterServer() を呼び出します。

これらは両方とも、.xll ファイルがクラスの COM サーバーになるようにレジストリ エントリを設定します。その後、CreateObject("MyNameSpace.MyClass") を使用して、VBA からレイト バインドされたオブジェクトにアクセスできます。

タイプ ライブラリをセットアップするには、別の手順が必要です (VBA でインテリセンスを提供するため)。このために、tlbexp.exe を使用してタイプ ライブラリを生成します。regsvr32 / ComServer.RegisterServer 呼び出しは、タイプ ライブラリを見つけて登録します。

.dll を .xll ファイルにパックすることもできます (pack='true' 属性を ExternalLibrary タグに追加します)。タイプ ライブラリも存在する場合はパックされ、呼び出し時に .xll ファイルのリソースから登録されます。 Regsvr32.exe

したがって、最終結果は、UDF、リボン、RTD サーバーを備えた Excel アドインであり、VBA からアクセスできる COM サーバーでもある単一ファイルの .xll アドインになる可能性があります。

ここでのディスカッションの詳細情報: http://exceldna.codeplex.com/discussions/252721およびここ: http://groups.google.com/group/exceldna/browse_frm/thread/4c5a71efbe96d885

于 2012-01-28T09:55:32.143 に答える