【问题标题】:How do you avoid the following error: "Automation Error. It is illegal to call out while inside message filter "?您如何避免以下错误:“自动化错误。在消息过滤器中调用是非法的”?
【发布时间】:2011-11-25 10:36:51
【问题描述】:

我目前正在开发一个调用 .net 应用程序的 vb6 应用程序。 但是,一旦打开 .net 应用程序并单击返回 vb6 应用程序,就会出现以下错误:

“自动化错误。在消息过滤器中调用是非法的”

我尝试在 vb6 IDE 中调试它,设置它在所有错误上中断,但它只是立即打开错误对话框。

有没有人可以解决这个问题?

【问题讨论】:

  • 如何调用 .NET 应用程序?如果它是某种进程外 COM/ActiveX 对象,那么这种行为是设计使然 - 在被调用者返回之前,您不能在调用者中运行另一个代码。

标签: .net vb6 error-handling


【解决方案1】:

基本上,您不能在子类处理程序中进行进程外 COM 调用(对 ActiveX EXE 等)。
您需要重构代码以在处理程序之外进行调用,例如在一个间隔为 1ms 的计时器中。如果您展示一些您正在使用的代码,我们可以提供进一步的帮助。

【讨论】:

  • Command1_Click 一个“子类处理程序”——怎么会?我在线程间的情况下也看到过同样的错误,因此不需要涉及 ActiveX EXE。
  • 没有提到正常的点击事件。我只在子类化和 OoP COM 中看到它,所以我这样回答。很可能还有其他原因,下面有空间提及。话虽如此,但计时器方法可能仍然是一个可行的解决方案。
猜你喜欢
  • 1970-01-01
  • 2012-04-11
  • 2014-09-14
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 2019-06-28
  • 1970-01-01
相关资源
最近更新 更多