尝试使用VB.net为com创建库

时间:2014-04-11 17:16:53

标签: vb.net vba com

我在这个话题上遇到了一段时间的麻烦,并且认为我会向社区寻求建议。我似乎无法找到适合在线vb.net的任何内容,而且我的C#知识不够清晰或完整,无法理解C#示例。

我希望能够在vb.net中创建一个类库,以便在其他地方的VBA宏中使用。特别是在Excel和我们使用的终端模拟器中。我试图从简单开始,然后从那里开始工作。目前,这是我尝试使用的测试代码:

Public Class ComTest

    Public Function SayHello() As String
        Return "Hello"
    End Function

End Class

在属性>下申请>装配信息我已检查过" make assembly com visible"框。

当我尝试使用VBA编辑器设置对此dll的引用时,我收到错误消息,指出我无法添加对指定文件的引用。如果我尝试声明这个函数:

Private Declare Function SayHello Lib "C:\SomePath\ComTest.dll" ()

我收到运行时错误'':无法在C:\ SomePath \ ComTest.dll中找到DLL入口点SayHello

我含糊地明白,声明这个功能将是采用"常规"包含非托管代码的DLL。前者实际上是创建COM组件。鉴于选择,我采取前者只是设置对文件的引用。特别是,我希望它可以免费注册,但我想我理解那部分,如果我可以让它作为VBA的com组件工作。

因此,如果有人能就这两种方法提供一些建议,我会非常感激。

1 个答案:

答案 0 :(得分:0)

使用COM时不应声明函数。制作COM是为了让你不需要这样做。

您的应用程序应在属性页中具有程序集名称(在您设置“make assembly com visible”的同一对话框中)复选框。该名称用于实例化您的对象:

Dim obj, msg
Set obj = CreateObject("YourAssemblyName.ComTest")
msg = obj.SayHello()

如果您需要提前绑定您的库,只需将其添加到您的项目引用(它应该出现在组件列表中)。然后你可以这样做:

Dim obj As YourAssemblyName.ComTest
Dim msg As String
Set obj = New YourAssemblyName.ComTest
msg = obj.SayHello()