我有一个VB6应用程序,尽管如此,它仍然能够在许多系统上工作,包括众多的Windows7 x64系统。
在大多数情况下,通过COMDLG32.OCX访问的windows对话框工作得很好。然而,在一个特定的系统上,这一点都不起作用。当试图显示"Open“(或"Save")对话框时,某些窗体会导致异常:
运行时错误“32765” 公共对话框函数在初始化过程中失败。当内存不足时,通常会发生此错误。
尽管使用它的其他一些表单根本不显示对话框。不用说,记忆不是问题。微软有一个kb关于错误的文章,上面写着:
您有一个运行在终端服务器上的MicrosoftVisualBasic6.0程序,该程序使用公共对话框控件打开文件,以下条件为真:
当这些条件为真时,您可能会收到上面引用的错误,上面提到的条件是不正确的--这完全是通过系统上的(仅本地)用户。建议的解决方案包括直接调用相关的API调用。
我不愿意在每一种相关的形式中实现所建议的代码堆,我发现已经为这个目的构建了一个类-- CDlgEx。虽然在OCX也能正常工作的所有计算机上都能很好地工作,但是在出现问题的系统上,当到达这一行时:
RetValue = GetOpenFileName(OFN)哪里
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long如果n是函数所期望的私有类型,则不会发生任何事情。没有出现对话框,程序只是移到下一行。
进一步的测试表明,只有在从IDE运行时才会发生这种情况。从一个复杂的可执行文件中运行,一切都很好。
发布于 2016-02-25 18:23:40
也有同样的问题。从下面的链接中获取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 Subhttps://stackoverflow.com/questions/35343282
复制相似问题