我试图访问VBA COM公开的方法。
问题:我看到所有的默认方法(如GetHashCode
, GetType
和ToString
在VBA),但不是那些它们是COM接口的组成部分,专门编写为COM可见(如getStringValue()
以下)。
设置的详细信息:
- Visual Studio 2008中
- Windows 7的64位
- 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对象资源管理器视图,我启用COM服务器(上面写SimpleCOMAssembly),现在在对象资源管理器没有列出下来COM接口方法(见下文)
有人可以帮助我知道我缺少这是造成COM接口方法在VBA中不显示?
生成的TLB的编辑 。附接的ITypeLib查看