【问题标题】:32bit dll used by VB6 program doesn't work in 64bit Win 7VB6 程序使用的 32 位 dll 在 64 位 Win 7 中不起作用
【发布时间】:2012-07-12 06:53:20
【问题描述】:

1) 一个32位的dll放在C:\Windows\SysWOW64

2) 使用 regasm.exe 注册

3) 在编译时,我将目标 cpu 设置为 x86

我可以在我的 vb6 程序中添加引用,但是当我尝试在 dll 中调用该方法时,它失败了。错误信息如下:

 "Runtime Error '-2147467261' object instance not set to an instance of an object"

代码在这里:

Set m_objCLogon = CreateObject("CommonLogon.Logon")
strResult = m_objCLogon.ValidateLogin(p_strUserID, p_strEncryptedPwd, p_strAppID)

代码非常简单,只需传入凭据进行验证。

有人知道哪一部分出了问题吗?

【问题讨论】:

  • 从错误信息来看,问题不在VB6应用程序,而在DLL本身。你应该看看ValidateLogin 的来源。
  • 它是 .NET DLL 还是 COM/ActiveX DLL?

标签: windows dll vb6


【解决方案1】:

显然注册没有问题,错误信息是.NET异常信息。您的代码正在轰炸 NullReferenceException。这是一个非常常见的异常,它(几乎)总是由代码中的错误引起的。

您需要调试代码。使用 Project + Properties,Debug 选项卡执行此操作。选择“启动外部程序”并将其设置为您的 vb6 程序或 c:\program files\microsoft visual studio\vb6\vb6.exe。然后 Debug + Exceptions,勾选 CLR exceptions 的 Throw 框。按 F5 开始。

【讨论】:

  • +1 当 Hans 说您需要调试代码时,他指的是 .Net 代码,而不是 VB6 代码。
【解决方案2】:

如果是我,我会将 DLL 复制到 System32 目录(因为它是 VB6 32 位 DLL),我会使用 regsvr32 c:\Windows\System32\MyDLL.DLL。就像在任何其他 32 位机器上使用它一样。

【讨论】:

    猜你喜欢
    • 2013-06-22
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 2013-06-11
    • 2012-03-06
    • 1970-01-01
    相关资源
    最近更新 更多