如何在VB6中创建标准DLL?

问题描述 投票:0回答:2

TL:DR;如何将VB6模块文件编译成标准DLL,我可以在多个VB6应用程序中使用?

我的任务是支持用VB6编写的多个遗留应用程序。

所有这些应用程序都使用了我的雇主构建的硬件。在我为雇主工作之前,他已经将为该项目开发DLL的工作外包给一家不再能够支持它的公司,因为为THEM工作的个人最近辞职,没有其他人能够解决它出。

我的雇主最近升级了我们的硬件,所以更糟糕的是 - 公司为我们提供的DLL也不再有用。

向我们发布新硬件的公司没有向我们发布能够在VB6中运行的DLL文件,这进一步加剧了这一事实。

现在由我来创建一个DLL文件(不是设备驱动程序),它能够促进新的(希望是旧的)设备和VB6应用程序之间的通信。

我对VB6的了解至多是有限的。我对.Net非常熟悉,并且在.Net中创建DLL方面取得了很大的成功,但是当谈到VB6时,我知道足够了。我在这里进入了未知领域。

我很熟悉HID.dllSetupAPI.dll P / Invokes和结构所需的结构,我甚至有幸偶然发现this,它有一个VB6代码的工作位,便于读/写HIDs连接到系统。我对此进行了测试并且(有点烦躁不安)它可以为我们的设备提供开箱即用的功能。但这对我没有帮助,因为我无法将模块编译成DLL文件(更不用说在VB6中计算事件和其他东西的卡车负载,但我已经领先于自己)。

我有readtried几种不同的方法,虽然他们证明有前途,但他们没有工作。

谷歌也淹没了我很多红色鲱鱼,一般来说不是很有帮助。

如果有必要,我甚至会用C / C ++编写它(尽管如果还有其他方法,我宁愿不写)。

那么我正在努力做到这一点?对于这类事情,有人可以指导我一步一步吗?

编辑1:

为了说明一点,当我说“它们不起作用”时,我的意思是在第一个链接的情况下,程序仍然无法找到该函数(带有“未找到函数入口点”的错误消息“)并且在第二种情况下,我在尝试调用函数时一直反复收到内存写入错误(不好玩)。

dll vb6
2个回答
2
投票

Here's指向一种标准DLL的链接,看起来比你发布的链接更直接。我可以说,如果Mike Strong(“strongm”)发布代码,它也可以。你可能想看看它。

但是,如果你能够使用COM可能会更好:它更容易设置(显然),并且它还具有一些标准功能,用于跟踪VB6中内置的对象接口。例如,当您使用TypeOf关键字时,VB6实际上对对象的QueryInterface方法进行内部调用,该方法保证作为COM的规则之一存在(并且,如果您在对标准DLL对象的引用上使用关键字)你会得到一个错误)。

VB6通过将类的Instancing属性设置为GlobalMultiUse来执行“静态”类。警告:“静态”关键字在VB6中具有完全不同的含义:静态局部变量的值在方法调用之间保持不变。


2
投票

1.在1998年获得VB6副本之后,启动一个新的ActiveX DLL项目:

enter image description here

2.编辑项目属性以获取野兽的名称。

3.为要创建的接口添加类。我巧妙地将类命名为VB6Class,因为项目/ DLL名为VB6DLL。

enter image description here

4.编写代码。我添加了一些测试方法来执行复杂的计算:


Option Explicit

Public Function GetAString(ByVal index As Integer) As String
    Dim ret As String

    Select Case index
        Case 0
            ret = "Alpha"
        Case 1
            ret = "Beta"
        Case Else
            ret = "Omega"
    End Select

    GetAString = ret
End Function

Public Function DoubleMyInt(ByVal value As Integer) As Integer  
    DoubleMyInt = (2 * value)    
End Function

Public Function DoubleMyLong(ByVal value As Long) As Long 
    DoubleMyLong = (2 * value)
End Function

5.从“文件”菜单中创建DLL。您可能需要运行作为管理员,以便它可以注册DLL。

6.在使用它的项目中,添加对DLL的引用。

测试代码:

Private Sub Command1_Click()
     Dim vb6 As New VB6DLL.VB6Class

     Dim var0 As String
     Dim var1 As Integer
     Dim var2 As Long

     var0 = vb6.GetAString(0)
     var1 = vb6.DoubleMyInt(2)
     var2 = vb6.DoubleMyLong(1234)

      Debug.Print "GetAString == " & var0
      Debug.Print "DoubleMyInt == " & var1
      Debug.Print "DoubleMyLng == " & var2
End Sub

结果:

GetAString == Alpha DoubleMyInt == 4 DoubleMyLng == 2468

不知道怎么办“其他东西的卡车装载”。

© www.soinside.com 2019 - 2024. All rights reserved.