如何在VB6中创建标准DLL?
TL:DR如何将VB6模块文件编译成可跨多个VB6应用程序使用的标准DLL 我的任务是支持用VB6编写的多个遗留应用程序 所有这些应用程序都使用我的雇主建造的硬件。在我开始为我的雇主工作之前,他已经将为项目开发DLL的工作外包给了一家公司,因为为他们工作的人最近辞职了,没有其他人能够弄清楚这一点,所以该公司不再有能力支持它 我的雇主最近升级了我们的硬件,所以更糟糕的是,公司提供给我们的DLL也不再有用了 向我们发布新硬件的公司没有向我们发布能够在VB6中运行的DLL文件,这一事实进一步加剧了这种情况 现在我要创建一个DLL文件(不是设备驱动程序),它能够促进新设备(希望是旧设备)和VB6应用程序之间的通信 我对VB6的了解是。。。充其量是有限的。我对.Net非常熟悉,并且在.Net中创建DLL方面取得了很大的成功,但是当涉及到VB6时,我知道的足够多了。我正在进入一个未知的领域 我非常熟悉实现此功能所需的如何在VB6中创建标准DLL?,dll,vb6,Dll,Vb6,TL:DR如何将VB6模块文件编译成可跨多个VB6应用程序使用的标准DLL 我的任务是支持用VB6编写的多个遗留应用程序 所有这些应用程序都使用我的雇主建造的硬件。在我开始为我的雇主工作之前,他已经将为项目开发DLL的工作外包给了一家公司,因为为他们工作的人最近辞职了,没有其他人能够弄清楚这一点,所以该公司不再有能力支持它 我的雇主最近升级了我们的硬件,所以更糟糕的是,公司提供给我们的DLL也不再有用了 向我们发布新硬件的公司没有向我们发布能够在VB6中运行的DLL文件,这一事实进一步加剧了这种
HID.dll
和SetupAPI.dll
p/调用和结构,我甚至幸运地偶然发现了它,它有一个VB6代码的工作位,可以方便地读/写连接到系统的HID。我对此进行了测试(有点坐立不安),它对我们的设备起到了开箱即用的作用。但这对我没有帮助,因为我无法将模块编译成DLL文件(更不用说计算VB6中的事件和一卡车其他东西了,但我已经超越了自己)
我已经尝试了许多不同的方法,虽然它们被证明是有前途的,但它们都不起作用
谷歌也给我带来了很多麻烦,但总体来说帮不了我什么忙
如果有必要,我甚至会用C/C++编写它(尽管如果有其他方法,我不希望这样)
那么,我想做的是可能的吗?有人能告诉我这类事情的具体步骤吗
编辑1:
更详细地说,当我说“它们不工作”时,我的意思是,在第一个链接的情况下,程序仍然无法找到函数(带有类似“函数入口点未找到”的错误消息),而在第二个情况下,我在尝试调用函数时始终反复收到内存写入错误(不有趣).1.在您前往1998年获取VB6副本后,开始一个新的ActiveX DLL项目: 2.编辑野兽名称的项目属性 3.为正在创建的接口添加一个类。我巧妙地将类命名为
VB6Class
,因为项目/DLL的名称为VB6DLL
4.编写代码。我添加了一些测试方法来执行复杂的计算:
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==AlphaDoubleMyInt==4
DoubleMyLng==2468
不确定如何处理“卡车装载的其他东西”。1。在您1998年的旅行中获取VB6副本后,开始一个新的ActiveX DLL项目: 2.编辑野兽名称的项目属性 3.为正在创建的接口添加一个类。我巧妙地将类命名为
VB6Class
,因为项目/DLL的名称为VB6DLL
4.编写代码。我添加了一些测试方法来执行复杂的计算:
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==AlphaDoubleMyInt==4
DoubleMyLng==2468 不确定如何处理“卡车装载的其他东西”。一个指向标准DLL的链接,它看起来比您发布的链接更简单。我可以说,如果Mike Strong(“strongm”)发布代码,它也可以工作。你可能想看看 但是,如果您能够的话,使用COM可能更好:它更容易设置(显然),而且它还具有一些跟踪对象接口的标准功能,这些功能内置于VB6中。例如,当您使用
TypeOf
关键字时,VB6实际上会对对象的QueryInterface方法进行内部调用,该方法保证作为COM规则之一存在(并且,如果在引用标准DLL对象时使用该关键字,则会出现错误)
VB6通过将类的Instance属性设置为GlobalMultiUse来执行“静态”类。警告:“static”关键字在VB6中具有完全不同的含义:静态局部变量的值在方法调用之间保持不变。指向标准DLL的链接,它看起来比您发布的链接更简单。我可以说,如果Mike Strong(“strongm”)发布代码,它也可以工作。你可能想看看
但是,如果您能够的话,使用COM可能更好:它更容易设置(显然),而且它还具有一些跟踪对象接口的标准功能,这些功能内置于VB6中。例如,当您使用TypeOf
关键字时,VB6实际上会对对象的QueryInterface方法进行内部调用,该方法保证