正如汉斯·帕桑特所说:“不。您必须使用 [Description] 属性'。只是为了扩展和包含来自 SO 问题 Hans 然后引用的信息,似乎 Description 属性必须是有关方法参数的所有文档的载体,因为 COM 接口定义语言 IDL 不支持这种粒度。
别担心,似乎可以在描述字段中输入大量文本。
更新:一些 VB.NET 示例代码的附加信息。
- 以管理员权限打开 Visual Studio(需要管理员才能注册)
- 创建 VB.NET 类库
- 转到项目属性
- 在构建选项卡上选中 Register for Interop 复选框
-
将默认类的代码更改为以下
Imports System.ComponentModel
Public Interface Interface1
<Description("Interface Description - Here we can put method information as well as parameter information")>
Function AddNumbers(ByVal X As Integer, ByVal Y As Integer)
<Description("Interface Description - Attempt to put description on Name")>
Property Name() As String
End Interface
'@987654322@
Public Class ComClass1
Implements Interface1
Dim sName As String
' These GUIDs provide the COM identity for this class
' and its COM interfaces. You can generate
' these guids using guidgen.exe
Public Const ClassId As String = "7666AC25-855F-4534-BC55-27BF09D49D46"
Public Const InterfaceId As String = "54388137-8A76-491e-AA3A-853E23AC1217"
Public Const EventsId As String = "EA329A13-16A0-478d-B41F-47583A761FF2"
Public Sub New()
MyBase.New()
End Sub
<Description("Here we can put method information as well as parameter information")>
Function AddNumbers(ByVal X As Integer, ByVal Y As Integer) Implements Interface1.AddNumbers
AddNumbers = X + Y
End Function
Property Name() As String Implements Interface1.Name
<Description("Attempt to put description on Name")>
Get
Return sName
End Get
<Description("Attempt to put description on Name")>
Set(ByVal Value As String)
sName = Value
End Set
End Function
End Class
还要添加一个新的项目项,一个界面,并粘贴到这段代码中
构建成功后打开Excel,创建工作簿
在 VBA 中转到 Tools->References ,导航到 ClassLibrary 并检查
转到对象浏览器并找到您的 ClassLibrary 和 ComClass1。
对于 AddNumbers 方法,您现在应该看到描述
- 还可以使用 Hans Passant 关于在属性的 getter 和 setter 上使用 Description 属性的提示进行验证。
但你是对的@DARBID,对象浏览器显示接口名称中缺少描述属性。
我只能建议您使用 MIDL 编译器来获取程序集的接口定义语言 (IDL),修改此 IDL 以提供 Description 属性,然后重新编译并邀请您的用户浏览您修改后的类型库。这是 IDL 的样子
[
odl,
uuid(54388137-8A76-491E-AA3A-853E23AC1217),
version(1.0),
dual,
oleautomation,
custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "ClassLibrary4.ComClass1+_ComClass1")
]
interface _ComClass1 : IDispatch {
[id(0x00000001), helpstring("Class Description Here we can put method information as well as parameter information")]
HRESULT AddNumbers(
[in] long X,
[in] long Y,
[out, retval] VARIANT* pRetVal);
[id(0x00000002), propget, helpstring("Class Description Attempt to put description on Name")]
HRESULT Name([out, retval] BSTR* pRetVal);
[id(0x00000002), propput, helpstring("Class Description Attempt to put description on Name")]
HRESULT Name([in] BSTR pRetVal);
};
您可以使用 Windows SDK 中的 OLEView.exe 查看计算机上任何 COM 库的 IDL。
或者也许有人可以找到一种将获取和设置放入 VB 接口的方法。我不在 VB.NET 中编程,我使用 VBA 和 C#。抱歉,我现在没有主意了。