背景:最近项目中需要用到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. 新浪微博授权时出现"关注 *** 的微博"

    基本设置完成后, 保证scope是 "all" 或 至少 包含 "follow_app_official_microblog". 测试时, 保证你的测试账号没有 ...

  2. SharePoint 2010 安装简介及相关补丁下载

    转:http://www.cnblogs.com/jianyus/archive/2011/10/28/2228212.html 1.安装Windows Server 2008 系统,这个我就不说了, ...

  3. C# Protect the Password inside a TextBox ZZ

    If the Text property is called, it will send an WM_GETTEXT message, so it will surely be an internal ...

  4. sql server 是否存在内存表?

    最近开发有个需求,需要使用到函数,但是函数中需要使用case when 判断分支,其实可以放到一张表中读取分支:但是物理表需要I/O开销,几十W的数据,线上开销也是很大的,所以就想sql server ...

  5. 《Differential Equations with Boundary-Value Problems》-chaper2-一阶线性方程

    学习微分方程中,一个很常见的疑惑就是,我们所熟悉的非齐次微分方程的通解是对应齐次方程的通解加特解,但是更为重要的是,我们需要知道这句话是怎么得来的. 我们探讨一个未知问题的一般思路是将其不断的与已知已 ...

  6. iOS开发笔记之TableView优化

    TableView相信只要是做iOS开发的就不会陌生,目前大多数iOS的app都是采用TabBar+NavigationBar+TableViewController这一主流框架, 既然用的这么频繁, ...

  7. STL源码剖析之_allocate函数

    SGI STL提供的标准std::allocator中的_allocate函数代码如下: template<class T> inline T* _allocate(ptrdiff_t s ...

  8. mvn开发可执行的java程序

    1.  用maven-assembly-plugin插件 2. 在项目的pom文件中加入以下该插件的配置 <span style="font-size:18px;">& ...

  9. 在地图上添加POI(二)

    在上一篇中实现一个icon + label的Marker需要使用两个Tangram的Marker, 今天分析了Tangram的源码后, 发现Tangram时支持单一Marker同时显示的, 这需要使用 ...

  10. MySQL数据库事务剖析

    MySQL数据库事务剖析 事务就是一组原子性的SQL查询,是一个独立的执行单元.事务内的语句,要么全部执行成功,要么全部执行失败. 1.事务的标准特征 一个运行良好的事务处理系统,必须具备原子性.一致 ...