【发布时间】: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