如何在VB6中创建标准DLL?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在VB6中创建标准DLL?相关的知识,希望对你有一定的参考价值。
TL:DR;如何将VB6模块文件编译成标准DLL,我可以在多个VB6应用程序中使用?
我的任务是支持用VB6编写的多个遗留应用程序。
所有这些应用程序都使用了我的雇主构建的硬件。在我为雇主工作之前,他已经将为该项目开发DLL的工作外包给一家不再能够支持它的公司,因为为THEM工作的个人最近辞职,没有其他人能够解决它出。
我的雇主最近升级了我们的硬件,所以更糟糕的是 - 公司为我们提供的DLL也不再有用。
向我们发布新硬件的公司没有向我们发布能够在VB6中运行的DLL文件,这进一步加剧了这一事实。
现在由我来创建一个DLL文件(不是设备驱动程序),它能够促进新的(希望是旧的)设备和VB6应用程序之间的通信。
我对VB6的了解至多是有限的。我对.Net非常熟悉,并且在.Net中创建DLL方面取得了很大的成功,但是当谈到VB6时,我知道足够了。我在这里进入了未知领域。
我很熟悉HID.dll
和SetupAPI.dll
P / Invokes和结构所需的结构,我甚至有幸偶然发现this,它有一个VB6代码的工作位,便于读/写HIDs连接到系统。我对此进行了测试并且(有点烦躁不安)它可以为我们的设备提供开箱即用的功能。但这对我没有帮助,因为我无法将模块编译成DLL文件(更不用说在VB6中计算事件和其他东西的卡车负载,但我已经领先于自己)。
我有read和tried几种不同的方法,虽然他们证明有前途,但他们没有工作。
谷歌也淹没了我很多红色鲱鱼,一般来说不是很有帮助。
如果有必要,我甚至会用C / C ++编写它(尽管如果还有其他方法,我宁愿不写)。
那么我正在努力做到这一点?对于这类事情,有人可以指导我一步一步吗?
编辑1:
为了说明一点,当我说“它们不起作用”时,我的意思是在第一个链接的情况下,程序仍然无法找到该函数(带有“未找到函数入口点”的错误消息“)并且在第二种情况下,我在尝试调用函数时一直反复收到内存写入错误(不好玩)。
Here's指向一种标准DLL的链接,看起来比你发布的链接更直接。我可以说,如果Mike Strong(“strongm”)发布代码,它也可以。你可能想看看它。
但是,如果你能够使用COM可能会更好:它更容易设置(显然),并且它还具有一些标准功能,用于跟踪VB6中内置的对象接口。例如,当您使用TypeOf
关键字时,VB6实际上对对象的QueryInterface方法进行内部调用,该方法保证作为COM的规则之一存在(并且,如果您在对标准DLL对象的引用上使用关键字)你会得到一个错误)。
VB6通过将类的Instancing属性设置为GlobalMultiUse来执行“静态”类。警告:“静态”关键字在VB6中具有完全不同的含义:静态局部变量的值在方法调用之间保持不变。
1.在1998年获得VB6副本之后,启动一个新的ActiveX DLL项目:
2.编辑项目属性以获取野兽的名称。
3.为要创建的接口添加类。我巧妙地将类命名为VB6Class
,因为项目/ DLL名为VB6DLL。
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
不知道怎么办“其他东西的卡车装载”。
以上是关于如何在VB6中创建标准DLL?的主要内容,如果未能解决你的问题,请参考以下文章