【问题标题】:Vb6 application works in the IDE but the executable crashesVb6 应用程序在 IDE 中工作,但可执行文件崩溃
【发布时间】:2012-10-12 03:20:59
【问题描述】:

我对 Visual Basic 6 项目有一点问题。在 IDE 中一切正常 但是每次运行应用程序时,可执行文件都会崩溃。该应用程序使用回调与 C++ dll 进行通信。回调开始时,即使是显示消息框这样简单的代码也会失败。

我将编译模式更改为P-Code,问题仍然存在。

任何帮助将不胜感激。

谢谢大家

【问题讨论】:

  • 崩溃时是否显示任何错误信息?

标签: vb6 crash executable


【解决方案1】:

这听起来像是回调可能发生在与您的应用程序正在执行的线程不同的线程上。 [编辑:我看到 Jim 已经建议了。] 如果是这样,是的,只要你“触摸”任何东西,kaboom OLE 相关或调用运行时。与多媒体计时器回调相同的故事,fwiw,我怀疑你必须采取与这种情况相同的预防措施。

不同线程回调的简短故事是,您需要使用类型库中声明的 PostMessage 向自己发布消息,以便 VB 不设置 Err 对象,然后让回调返回。您在收到发布的消息后自行处理。这是我在 CCRP Timers 库中使用的类型库:

http://vb.mvps.org/tools/files/postmessage.zip

希望对您有所帮助...

【讨论】:

  • 非常感谢 Karl,并为我的无知感到抱歉,但这是我的第一个 Visual Basic 6 项目。如何使用 tlb 文件,我尝试在 VB IDE 中添加引用但不起作用,我可以将结构或类类型传递给 postMethod,因为回调返回给我 4 个值。
【解决方案2】:

谁回电给谁?给我们看一个小代码。

IDE 可以掩盖真正的问题,所以仅仅能够运行并不能保证您正在做的事情得到支持。

回调的一个常见问题是 VB6 的运行时不是线程安全的,因此如果另一个线程回调到您的 VB 代码中,您将无法执行任何会调用运行时的操作——例如访问字符串或对象。

有一些方法可以解决其中一些问题,但我认为我们需要先了解更多。

【讨论】:

    【解决方案3】:

    代码是否从与 IDE 相同的位置运行?可能是引用问题,需要重新注册DLL。

    部署包应确保您已安装所有内容。

    【讨论】:

    • 是的,是同一个位置,实际上对同一个 dll 的其他调用工作正常
    • 你是晚装还是早装?下面的 cmets 也是正确的......发布导致崩溃/调用对象的代码段会很好。
    【解决方案4】:

    几个问题:

    1. 可执行文件是在开发时所在的同一台 PC 上,还是在不同的 PC 上?
    2. 该文件是否使用清单文件?如果是这样,mainfest 是否调用 XP 主题?
    3. 另外,如果使用清单,清单是否对 OCX 文件使用 SXS?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多