VB6 SET语句-它应该在外部DLL中实际执行代码吗?

VB6 SET语句-它应该在外部DLL中实际执行代码吗?,vb6,Vb6,我有一个VB6 Exe和一个V6 DLL,这两个都可以正常工作,但是如果对DLL进行了新的修改,它会给我带来问题,因为DLL内部代码实际上正在执行-这会弄乱我的应用程序-但我不确定这是否真的是正确的行为 VB6 Exe部分代码如下: Set Scanner = New Devices.Scanner If Scanner.SupportedDevicesCount > 0 Then Dim i As Long For i = 1 To Scanner.SupportedDe

我有一个VB6 Exe和一个V6 DLL,这两个都可以正常工作,但是如果对DLL进行了新的修改,它会给我带来问题,因为DLL内部代码实际上正在执行-这会弄乱我的应用程序-但我不确定这是否真的是正确的行为

VB6 Exe部分代码如下:

Set Scanner = New Devices.Scanner

  If Scanner.SupportedDevicesCount > 0 Then
  Dim i As Long

  For i = 1 To Scanner.SupportedDevicesCount
      With Scanner.SupportedDevicesInfo(i)
          If .Available = True Then
  ..
  ..
在外部DLL中有以下代码

Public Property Get SupportedDevicesInfo(ByVal Index As Long) As DeviceInfo
  On Error Resume Next
  SupportedDevicesInfo = mSupportedDevices(Index).DeviceInfo
End Property
我的问题是这个SupportedDeviceInfo执行了“两次”,我不明白为什么

它在
Set Scanner=New Devices.Scanner
上执行一次,然后在
Scanner.supportedDeviceInfo(i)

这导致在设备上发生各种内部功能,即

Private Function IScanDevice_OpenDevice() As Scan_ResultCodes
在接到电话之前不应该这样做

如果您能在这方面提供帮助,我将不胜感激。
谢谢

VB6 DLL的初始化类中是否有任何内容?如果您认为这与DLL中的代码有关,作为测试,请将所有DLL代码添加到EXE项目中,并查看是否有任何更改。因此,如果可以避免的话,首先不要编译成单独的DLL。正如@OldBoyCoder所暗示的那样,如果DLL中没有UI元素,那么应该执行的唯一代码就是Class_Initialize过程。检查以确保您没有调用信息代码,即使是间接调用。您可以通过将dll项目添加到解决方案中进行调试。然后在exe项目中引用它。通过这种方式,你可以逐行调试你的代码我同意@TSion.D.P,只是它在VB6中被称为一个组而不是一个解决方案。VB6 DLL的初始化类中有什么东西吗?如果你认为这与DLL中的代码有关,作为测试,将所有DLL代码添加到EXE项目中,看看是否有任何变化。因此,如果可以避免的话,首先不要编译成单独的DLL。正如@OldBoyCoder所暗示的那样,如果DLL中没有UI元素,那么应该执行的唯一代码就是Class_Initialize过程。检查以确保您没有调用信息代码,即使是间接调用。您可以通过将dll项目添加到解决方案中进行调试。然后在exe项目中引用它。通过这种方式,你可以逐行调试你的代码。我同意@TSion.D.P,只是它在VB6中被称为组而不是解决方案。