jacob调用OCX错误

田秋实 发布于 2011/11/07 13:59
阅读 2K+
收藏 0
在OCX控件中,重写COleControl.IsInvokeAllowed (DISPID)方法,即在控件的CMyNameCtrl中增加一个方法
BOOL CMyNameCtrl::IsInvokeAllowed (DISPID)
   {

      return TRUE;

   }

用这个方法的理由是:

这个错误是由ActiveX结构设计造成的。

在Ole4.0版本之前,外部程序是可以直接调用OCX中方法的。Ole4.0之后,每次调用控件中的方法,系统会自动检查是否允许调用,即运行COleControl.IsInvokeAllowed (DISPID)

该方法检查控件是否正确的初始化或者是否通过持久存储接口正确加载,如果两个条件有一个满足,即返回TRUE,否则返回FALSE。

当控件在MFC中使用时,很多细节,如初始化,都被过滤了,这样,大多数用户都不会遇到这个问题。但是,当我们从C、C++的dll中调用控件时,不满足上述条件,该方法返回FALSE,这时候再调用任何控件方法,都会出现上述异常。

这种办法显然不行,因为ocx第三方控件是另一家公司提供的。我之后用vs2010建了一个winform 工程,然后导入ocx控件,控件竟然能用,不报错误。所以,我采取了另一种办法,java 调用exe应用程序。

————————————————————————————————
看了你评论的信息,现在我也遇到同样的问题,OCX是第三方的,请问你说的调用exe是什么意思?谢谢
加载中
返回顶部
顶部