首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的VB6应用程序不能在某些系统上打开“打开”对话框

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

Stack Overflow用户
提问于 2016-02-11 15:23:55
回答 1查看 1K关注 0票数 0

我有一个VB6应用程序,尽管如此,它仍然能够在许多系统上工作,包括众多的Windows7 x64系统。

在大多数情况下,通过COMDLG32.OCX访问的windows对话框工作得很好。然而,在一个特定的系统上,这一点都不起作用。当试图显示"Open“(或"Save")对话框时,某些窗体会导致异常:

运行时错误“32765” 公共对话框函数在初始化过程中失败。当内存不足时,通常会发生此错误。

尽管使用它的其他一些表单根本不显示对话框。不用说,记忆不是问题。微软有一个kb关于错误的文章,上面写着:

您有一个运行在终端服务器上的MicrosoftVisualBasic6.0程序,该程序使用公共对话框控件打开文件,以下条件为真:

  • 用户正在使用漫游配置文件。
  • 在用户注销时,有一项删除漫游配置文件的策略。

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

我不愿意在每一种相关的形式中实现所建议的代码堆,我发现已经为这个目的构建了一个类-- CDlgEx。虽然在OCX也能正常工作的所有计算机上都能很好地工作,但是在出现问题的系统上,当到达这一行时:

代码语言:javascript
复制
RetValue = GetOpenFileName(OFN)

哪里

代码语言:javascript
复制
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

如果n是函数所期望的私有类型,则不会发生任何事情。没有出现对话框,程序只是移到下一行。

进一步的测试表明,只有在从IDE运行时才会发生这种情况。从一个复杂的可执行文件中运行,一切都很好。

EN

回答 1

Stack Overflow用户

发布于 2016-02-25 18:23:40

也有同样的问题。从下面的链接中获取cCommonDialog类并将其添加到项目中。

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

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

代码语言:javascript
复制
Private Sub Command1_Click()
    Dim commonDialog As New GCommonDialog
    Dim fileName As String

    commonDialog.VBGetOpenFileName fileName

    MsgBox fileName
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35343282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档