【问题标题】:Set IntPtr value of COM DLL in VB.net project在 VB.net 项目中设置 COM DLL 的 IntPtr 值
【发布时间】:2018-05-18 00:31:04
【问题描述】:

我的任务是编写一个 VB.NET 库来与一个 VB6 应用程序进行交互。此 VB6 应用程序提供了一些非托管 COM DLL。

我创建了互操作类型(通过使用 tlbimp)并将它们作为引用添加到我的 VB.NET 项目中。

嗯,还有一个旧的 VB6 项目(库)存在,它也引用了(本机)COM DLL,我们称它们为 COM1.dllCOM2.dllCOM3.dll。 这个旧项目有一个名为 claMod 的“类模块”,它正在执行以下操作:

    Option Explicit
    Public Property Set GlobalProp(oObj As claClass1)
            Set COM1.MyPointer = oObj
            Set COM2.MyPointer = oObj
    End Property

其中claClass1COM3 中的一个类,COM1.MyPointerCOM2.MyPointer 的类型为System.IntPtr

我的问题是:如何在不声明相应对象(COM1 和 COM2 的实例)的情况下设置这两个指针?其次,如何在我的新 VB.NET 库中做同样的事情?

【问题讨论】:

  • 它们是引用而不是指针,MyPointer 属性属于与 claClass1 兼容的类型。在您的 VB6 示例中,COM1/2 必须在某处实例化...
  • @AlexK。必须在某个地方实例化,是的,但是通过将类的 Instancing 属性设置为 GlobalMultiUse,类会在运行时自动实例化。

标签: vb.net dll vb6


【解决方案1】:

要允许引用 COM1 和 COM2 而无需专门实例化它们,请将每个类的 Instancing 属性设置为 GlobalMultiUse。然后,您在帖子中的代码将可以工作,而无需创建对它的引用。

在 VB6 环境中已经运行了许多这样的对象; Screen 对象是一个熟悉的例子。

这与在 VB.Net 中声明 Shared 类或在 C# 中声明 static 类基本相同。

【讨论】:

    猜你喜欢
    • 2013-01-06
    • 2020-08-04
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    相关资源
    最近更新 更多