【问题标题】:Trying to create a library for com using VB.net尝试使用 VB.net 为 com 创建一个库
【发布时间】:2014-05-25 23:22:35
【问题描述】:

我在这个话题上遇到了一些麻烦,我想向社区寻求建议。我似乎无法在网上找到任何面向 vb.net 的内容,而且我的 C# 知识不够全面,无法理解 C# 示例。

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

Public Class ComTest

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

End Class

在属性 > 应用程序 > 程序集信息下,我选中了“使程序集 com 可见”框。

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

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

我收到运行时错误“453”:在 C:\SomePath\ComTest.dll 中找不到 DLL 入口点 SayHello

我隐约明白,声明函数将是使用包含非托管代码的“常规”DLL 的方法。前者实际上是创建一个 COM 组件。如果可以选择,我会选择前者并设置对文件的引用。特别是,我希望它是免费注册的,但如果我能让它作为 VBA 的 com 组件工作,我想我理解这部分。

因此,如果有人可以就这两种方法提供一些建议,我将不胜感激。

【问题讨论】:

    标签: vb.net vba com


    【解决方案1】:

    在使用 COM 时不应声明函数。 COM 是为了让您无需这样做。

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

    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()
    

    【讨论】:

    • VBA 不允许我设置对 dll 的引用,并且尝试 CreateObject 方法导致运行时错误 429:ActiveX 组件无法创建对象。对于它的价值,如果可能的话,我宁愿早绑定也不要晚绑定。不过还是谢谢你的建议。
    • 如果您需要提前绑定,只需在项目中引用您的库,然后执行 Set obj = New YourAssemblyName.ComTest。您不能将 Declare Function 与 COM 对象一起使用:它根本不起作用。
    • 我刚刚更改了答案以反映这一点。您需要成功构建 VB.Net 库项目才能将其注册为 COM 对象。
    猜你喜欢
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2021-01-17
    • 2015-01-15
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多