我正在尝试访问 VBA 中的 COM 公开方法。
问题:我在 VBA 中看到了所有默认方法(如和) GetHashCode
,但不是作为 COM 接口一部分且专门编写为 COM 可见的方法(如下所示)。GetType
ToString
getStringValue()
设置详情:
- 视觉工作室 2008
- 视窗 7 x64
- 办公室 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";
}
}
}
在 Build 属性中,我选中了“Make Assembly COM Visible”(见下面的快照)
还要求 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 视图