VBAでCOM公開メソッドにアクセスしようとしています。
問題: VBAにすべてのデフォルトメソッド(GetHashCode
、、GetType
など)が表示されていますが、COMインターフェイスの一部であり、COMが表示されるように特別に記述されたメソッド(以下のように)は表示されません。ToString
getStringValue()
セットアップの詳細:
- Visual Studio 2008
- Windows 7 x64
- Office 2007
- .NET 3.5
インターフェイス'IGetMyString.cs'
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace SimpleCOMAssembly
{
[ComVisible(true), GuidAttribute("4153A1AC-ECE9-4f66-B56C-1DDEB6514D5D")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
interface IGetMyString
{
[DispId(1)]
string getStringValue();
}
}
実装'GetMyString.cs'
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.ComponentModel;
namespace SimpleCOMAssembly
{
[ComVisible(true), GuidAttribute("0A3D4D65-CF50-4020-BF13-77001F8AAABE")]
[ProgId("SimpleCOMAssembly.GetMyString")]
[ClassInterface(ClassInterfaceType.None)]
public class GetMyString : IGetMyString
{
public GetMyString() { }
[ComVisible(true), Description("Get my string")]
public string getStringValue()
{
return "hello";
}
}
}
[ビルドプロパティ]で、[アセンブリCOMを表示する]をオンにしました(以下のスナップショットを参照)
また、Visual Studio 2005に「COM相互運用機能の登録」を作成するように依頼しました(以下のスナップショットを参照)
そして最後に、ビルド後のイベントとして、regasm.exeを実行して、次のように.DLLと.TLBをレジストリに登録します。
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\regasm /codebase "$(TargetPath)" /tlb:"$(TargetDir)$(TargetName).lib"
Excel Object Explorerビューで、COMサーバー(上記のSimpleCOMAssembly)を有効にしましたが、Object Explorerでは、COMインターフェイスメソッドが一覧表示されません(以下を参照)。
誰かが私が欠けているものを知るのを手伝ってくれますか?それはCOMインターフェースメソッドがVBAに表示されない原因になっていますか?
生成されたTLBのITypeLibビューを添付して 編集