【问题标题】:Why can my VB6 app not open the "Open" dialog on some systems为什么我的 VB6 应用程序无法在某些系统上打开“打开”对话框
【发布时间】:2016-02-26 02:23:40
【问题描述】:

我有一个 VB6 应用程序,尽管一切都设法在许多系统上运行,包括众多 Windows 7 x64 系统。

在大多数情况下,通过 COMDLG32.OCX 访问的 Windows 对话框工作正常。但是,在一个特定的系统上,这根本不起作用。某些表单在尝试显示“打开”(或“保存”)对话框时会导致异常:

运行时错误“32765”

通用对话框功能在初始化过程中失败。内存不足时经常会出现这个错误

虽然其他一些使用它的表单根本不显示对话框。不用说,内存不是问题。微软有一个kb article on the error,他们说:

您有一个在终端服务器上运行的 Microsoft Visual Basic 6.0 程序,该程序使用 Common Dialog 控件打开文件,并且满足以下条件:

  • 用户正在使用漫游配置文件。
  • 有一个策略可以在用户注销时删除漫游配置文件。

当这些条件为真时,您可能会收到[上面引用的错误] 提到的条件不正确 - 这完全是通过系统上的(唯一的,本地的)用户。建议的解决方案涉及直接调用相关的 API 调用。

不愿意执行以各种相关形式建议的大量代码,我发现已经为此目的构建了一个类 - CDlgEx。虽然这在 OCX 也可以正常工作的所有计算机上都可以正常工作,但在出现问题的系统上,只要达到此行:

RetValue = GetOpenFileName(OFN)

在哪里

Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

并且 OFN 是函数所期望的私有类型,没有任何反应。没有对话框出现,程序直接转到下一行。

进一步的测试表明,这只发生在从 IDE 运行时。从已编译的可执行文件运行,一切都很好。

【问题讨论】:

  • IDE 和编译器不兼容 x64 系统,只兼容 32 位系统。编译的程序与 x64 兼容。
  • VB6 IDE/编译器在 x64 系统上运行良好。

标签: dialog vb6 runtime-error


【解决方案1】:

遇到了完全相同的问题。从以下链接中获取 cCommonDialog 类并将其添加到您的项目中。

https://github.com/ziggythehamster/ignitionserver/blob/master/vbtracer/cCommonDialog.cls

然后你可以在你的代码中做这样的事情

Private Sub Command1_Click()
    Dim commonDialog As New GCommonDialog
    Dim fileName As String

    commonDialog.VBGetOpenFileName fileName

    MsgBox fileName
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 2021-04-09
    相关资源
    最近更新 更多