zoukankan      html  css  js  c++  java
  • C#调用ActiveX控件

    背景:最近项目中需要用到ActiveX控件,项目是在.Net平台下开发的。因此就直接在项目中添加了对ActiveX控件的引用,添加引用成功。在代码中实例化类的实例也没有问题,但在调用其方法或属性时总是抛出"未处理 COMException"异常。

    方法一:

    1、在系统中注册该ocx控件,命令:regsvr32.exe 控件位置(加 /u 参数是取消注册);
    2、在.net的工具箱中添加该控件,拖到form中去就可以了。

    方法二:

    1、用Aximp.exe来包装一下ocx控件的类;

    2、在程序中引用生成的dll就可以了。

    区别:

    1、方法一不需要手动包装ocx控件,方法二需要;

    2、方法一需要将控件先添加到工具箱,方法二不需要。

     ************************************************************************

    关于Aximp.exe包装ock控件在msdn中一段相关文字,链接:http://msdn.microsoft.com/zh-cn/library/8ccdh774(VS.80).aspx 

    链接内容:

    Windows 窗体 ActiveX 控件导入程序 (Aximp.exe)
     
    ActiveX 控件导入程序将 ActiveX 控件的 COM 类型库中的类型定义转换为 Windows 窗体控件。
    Windows 窗体只能承载 Windows 窗体控件,即从 Control 派生的类。Aximp.exe 生成可承载于 Windows 窗体上的 ActiveX 控件的包装类。这使您得以使用可应用于其他 Windows 窗体控件的同一设计时支持和编程方法论。
    若要承载 ActiveX 控件,必须生成从 AxHost 派生的包装控件。此包装控件包含基础 ActiveX 控件的一个实例。它知道如何与 ActiveX 控件通信,但它显示为 Windows 窗体控件。这个生成的控件承载 ActiveX 控件并将其属性、方法和事件公开为生成控件的属性、方法和事件。
    aximp [options]{file.dll | file.ocx}
    备注
    参数:说明 

    file:包含要转换的 ActiveX 控件的源文件名。文件参数中必须有扩展名 .dll 或 ocx。
    选项:说明
    /delaysign:
    指定 Aximp.exe 用延迟的签名操作对结果控件进行签名。此选项必须与 /keycontainer:、/keyfile: 或 /publickey: 选项一起指定。有关延迟的签名过程的更多信息,请参见延迟为程序集签名。
    /help :
    显示该工具的命令语法和选项。
    /keycontainer: containerName:
    使用在 containerName 所指定的密钥容器中找到的公钥/私钥对,用强名称对结果控件进行签名。
     
    /keyfile: filename:
    使用在 filename 中找到的发行者的正式公钥/私钥对,用强名称对结果控件进行签名。
     
    /nologo:
    取消显示 Microsoft 启动标题。
     
    /out: filename:
    指定要创建的程序集的名称。
     
    /publickey: filename:
    使用在 filename 所指定的文件中找到的公钥,用强名称对结果控件进行签名。
     
    /silent:
    取消显示成功消息。
     
    /source:
    生成 Windows 窗体包装的 C# 源代码。
     
    /verbose:
    指定详细模式;显示附加的进度信息。
     
    /? :
    显示该工具的命令语法和选项。
    Aximp.exe 一次转换整个 ActiveX 控件类型库,并产生一组程序集,这些程序集包含在原始类型库中定义的类型的公共语言运行库元数据和控件实现。生成的文件按照下面的模式命名:
    COM 类型的公共语言运行库代理:progid.dll
    ActiveX 控件的 Windows 窗体代理(其中 Ax 表示 ActiveX):Axprogid.dll
    注意 
    如果 ActiveX 控件的成员名称与 .NET Framework 中定义的名称匹配,则 Aximp.exe 在创建 AxHost 派生类时,将在成员名称前加上前缀“Ctl”。例如,假设 ActiveX 控件有一个名为“Layout”的成员,由于在 .NET Framework 中定义了 Layout 事件,因此该成员在 AxHost 派生类中将重命名为“CtlLayout”。
    可以使用 MSIL 反汇编程序 (Ildasm.exe) 这样的工具检查这些生成的文件。
    注意,在 ActiveX 控件 shdocvw.dll 上运行 Aximp.exe 将总是在运行该工具的目录中创建另一个名为 shdocvw.dll 的文件。如果将此生成文件放在“Documents and Settings”目录下,则会导致 Microsoft Internet Explorer 和 Windows 资源管理器出现问题。重启计算机时,Windows 在查看 system32 目录之前首先查看“Documents and Settings”目录,以查找 shdocvw.dll 的副本。它将使用在“Documents and Settings”目录中找到的副本,并尝试加载托管的包装。由于 Internet Explorer 和 Windows 资源管理器依赖于 system32 目录中的 shdocvw.dll 版本中的呈现引擎,因此它们将无法正常工作。如果出现此问题,请在“Documents and Settings”目录中删除 shdocvw.dll 的副本,然后重启计算机。
    示例
    下面的命令为媒体播放器控件 msdxm.ocx 生成 MediaPlayer.dll 和 AxMediaPlayer.dll。
    aximp c:/systemroot/system32/msdxm.ocx
  • 相关阅读:
    Vue入门系列(四)之Vue事件处理
    Vue入门系列(五)Vue实例详解与生命周期
    微信为啥不能直接下载.apk安装包
    Oracle行转列SQL
    MyISAM 和InnoDB区别
    jQuery easyui datagrid数据绑定
    js调用百度地图API创建地图,搜索位置
    python tornado框架使用
    python数据库连接池
    python操作数据库
  • 原文地址:https://www.cnblogs.com/gjhjoy/p/3528158.html
Copyright © 2011-2022 走看看