背景:最近项目中需要用到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

C#调用ActiveX控件的更多相关文章

  1. 袁创:使用反射动态调用ActiveX控件

    ■■■■前言 目前的基于.NET平台的软件研发中仍然存在大量的对COM及ActiveX控件的调用.使用C#调用ActiveX控件时一般是使用vs.net工具自动生成的互操作性程序集.这种方法操作简单, ...

  2. 使用反射动态调用ActiveX控件

    使用反射动态调用ActiveX控件 袁永福 2018-3-2 ■■■■问题描述: 目前的基于.NET平台的软件研发中仍然存在大量的对COM及ActiveX控件的调用.使用C#调用ActiveX控件时一 ...

  3. 【VS开发】使用MFC创建并调用ActiveX控件

    使用MFC创建并调用ActiveX控件 今天做了一下ActiveX的使用测试,总结一下: 首先使用MFC创建一个activeX的控件譬如ActiveXTest,编译成ocx并注册,然后另外编写一个测试 ...

  4. ie 64bit调用activex控件

    1,首先,这是可能的.不要被网上一堆ie64调不了activex控件的文章误导了.flash就是一个现成的例子,flash支持ie64. 2,ie64只能调用64bit的activex控件.网上那些说 ...

  5. 谷歌浏览器调用activex控件方法

    原文转自 https://jingyan.baidu.com/article/af9f5a2d0ebe5543140a4596.html activex是由微软开发,所以在支持上,目前原生态支持的只有 ...

  6. 【转】Win32程序中调用ActiveX控件

    #include "stdafx.h" #include <iostream> #include <windows.h> #include <comd ...

  7. Qt开发Activex笔记(二):Qt调用Qt开发的Activex控件

    若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/113789693 长期持续带来更多项目与技术分享 ...

  8. .net下开发ActiveX控件

    `   ActiveX 是一个开放的集成平台,为开发人员. 用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内容的方法. 使用 ActiveX, 可 ...

  9. 使用C#开发ActiveX控件(新)

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

随机推荐

  1. Apache Commons IO 2.3 几点用法

    //直接将IO流转成字符串 InputStream in = new URL( "http://jakarta.apache.org" ).openStream(); try { ...

  2. C#4.0中var和dynamic的区别

    1. var表示“变量的类型是在编译时决定的”, var让你在初始化变量时少输入一些字,编译器会根据右值来推断出变量的类型, var只能用于局部变量的定义,你不能把类的属性定义成 var,也不能把方法 ...

  3. 编译 Spring-framework的经验分享

    Spring-framework source codegit url: git clone git://github.com/SpringSource/spring-framework.git 导入 ...

  4. poj 1274 The Perfect Stall【匈牙利算法模板题】

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20874   Accepted: 942 ...

  5. POJ 2955 括号匹配,区间DP

    题意:给你一些括号,问匹配规则成立的括号的个数. 思路:这题lrj的黑书上有,不过他求的是添加最少的括号数,是的这些括号的匹配全部成立. 我想了下,其实这两个问题是一样的,我们可以先求出括号要匹配的最 ...

  6. C#封装加密算法(MD5、SHA、HMAC、DES、RSA)的一个类

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...

  7. noip 2015 提高组

    算是填个坑吧 , QwQ Day 1 第一题很水,就是考代码能力 ,直接贴代码. #include <iostream> #include <cstdlib> #include ...

  8. ctrl+z的JAVA实现,借助了命令模式(command pattern)

    前些天学习<<JAVA与模式>>,到命令模式时,随带给了一个CTRL+Z案例的实现,想来学习编程这么久,CTRL+Z还没有认真实现过. 因此,借助JAVA与模式里面的源代码,自 ...

  9. Microsoft SyncToy 文件同步工具

    Microsoft SyncToy SyncToy 是由 微软 推出的一款免费的文件夹同步工具.虽然名字中有一个 Toy,但是大家可千万不要误以为它的功能弱爆了.实际上,我感觉这款软件还真是摆脱了微软 ...

  10. Unity3D中Prefab

    Prefab概念: Prefab是一种资源类型--存储在项目视图中的一种可反复使用的游戏对象.因而当游戏中须要非常多反复使用的对象.资源等时,Prefab就有了用武之地.它拥有下面特点: 能够放到多个 ...