为什么我的VB6应用程序无法在某些系统上打开“打开”对话框

时间:2016-02-11 15:23:55

标签: dialog vb6 runtime-error

我有一个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运行时才会发生这种情况。从一个compliled可执行文件运行,一切都很好。

1 个答案:

答案 0 :(得分:0)

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

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

然后您可以在代码中执行类似的操作

alert( tableOpts.searchable)