文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>C#调用OCX控件Catastrophic failure解决方法

C#调用OCX控件Catastrophic failure解决方法

时间:2011-04-21  来源:Jerry.Kwan

在C#中调用VC写的OCX控件,有时会碰到一些很奇怪的问题,比如运行时程序报错:(8000ffff) : "Catastrophic failure".具体什么原因导致?以下以一个简单的OCX为例(简称APT.ocx)。
APT.ocx在VB以及VC中使用没有问题,但在C#中使用就很奇怪,具体现象如下:
注册APT.ocx后,直接在C#工程中引用该控件,在调用该控件提供的方法时程序报错:(8000ffff) : "Catastrophic failure".经查证,导致此异常的原因在于C#调用控件的方式是通过automation server,但在visual C++4.0以后在IDispatch::Invoke中增加IsInvokeAllowed判断,来确定是否允许automation call,系统默认是返回False,也就是不支持automation call。
为解决这一问题,可以采用microsoft提供的Aximp.exe工具对APT.ocx做转换,对APT.ocx再次封装成两个类库(APTLib.dll,AxAPTLib.dll),但对程序中的使用还要分两种情况:
(1)C# Windows Form
对于Windows Form程序,直接添加AxAPTLib.dll引用,调用Controls.add()方法添加AxAPTLib.AxAPT类实例即可
(2)C#非Windows Form
对于非Windows Form的C#程序而言,操作稍显麻烦,需要实例化AxAPTLib.AxAPT(),并显式调用该实例的CreateControl()方法才能调用其他方法否则在调用时系统将报AxHost.InvalidActiveXStateException异常

详情请参阅:
http://support.microsoft.com/kb/189065/en-us
http://support.microsoft.com/kb/146120/EN-US/

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载