尝试处理 ActiveX 事件时出错

Posted

技术标签:

【中文标题】尝试处理 ActiveX 事件时出错【英文标题】:Getting error when trying to handle ActiveX event 【发布时间】:2010-09-17 19:24:16 【问题描述】:

我有两台 ActiveX 服务器需要处理它的事件。 第一个我可以毫无问题地工作,但是第二个我在尝试分配新事件时遇到错误。运行代码的代码如下:

   public delegate void ICwGetXEvents_OnCommandExEventHandler(uint CommandW, uint CommandL, string CommandText);

     public CwGet.CwGetXClass ax_CwGet;

    //event
      public void CwGetXEvents_OnCommandExEventHandler(uint CommandW, uint CommandL, string CommandText)
        

          if (CommandL == 4)
            
               //some code
            


        

//ok here is how I assign the controls and event:

 ax_CwGet = new CwGetXClass();
 ax_CwGet.OnCommandEx += CwGetXEvents_OnCommandExEventHandler;

好的,第二个控件(它是由同一家公司创建的)我尝试同样的事情:

public delegate void ITrueTtyXEvents_OnCallsignEventHandler(string Call);
public truetty.TrueTtyXClass ax_truetty;

//event
    public void TrueTtyXEvents_OnCallsignEventHandler(string Call)
        
           //somecode
         

ax_truetty = new TrueTtyXClass();
ax_truetty.OnCallsign+= TrueTtyXEvents_OnCallsignEventHandler;

但是,当我创建新的 ActiveX 对象时,它可以工作,但是当我去分配事件时,我得到了这个错误:

“由于应用程序正在调度输入同步调用,因此无法进行传出调用。(来自 HRESULT 的异常:0x8001010D (RPC_E_CANTCALLOUT_ININPUTSYNCCALL))”

想知道是否有人能指出我正确的方向..

迈克

【问题讨论】:

【参考方案1】:

这是一个线程问题。您应该向组件供应商寻求帮助,听起来他们没有正确设置 ThreadingModel 注册表项。但是您可能会得到的响应是“不要从工作线程中使用它们,而只能从 STA 线程中使用它们”。这对于 ActiveX 控件很常见。

【讨论】:

以上是关于尝试处理 ActiveX 事件时出错的主要内容,如果未能解决你的问题,请参考以下文章

Access 数据库窗体 ActiveX 控件错误

使用 NUnit+Reflection,在我的 ActiveX 控件上找不到任何事件

MFC设计器中的“无法访问ActiveX控件类型库”错误

使用 activex COM 组件加载 ASP 页面时出错

如何注入脚本来监听 activeX 事件?

单击时,如何使使用 C# 编写的 ActiveX 控件在 JavaScript 中引发事件?