zoukankan      html  css  js  c++  java
  • C#调用OCX控件Catastrophic failure解决方法

    在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/

  • 相关阅读:
    Git with SVN 协同设定
    Apache+Django+mod_wsgi安装目录
    ROR study
    PHP框架
    Gerrit 配置
    Garmin、任我游品牌自制等高线方法比较
    使用python发送outlook约会提醒邮件
    Apache部署多个django site project
    Aptana Studio 3安装(Windows)
    The Art of Readable Code
  • 原文地址:https://www.cnblogs.com/Jerryshome/p/2023183.html
Copyright © 2011-2022 走看看