C#中引用第三方ocx控件引发的问题以及解决办法

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

不用工具箱的话,自己手工添加,需要注意一个问题,就是要用Aximp.exe来包装一下ocx控件的类,然后再程序中引用生成的dll就可以了。
aximp [options]{file.dll | file.ocx}
The following command generates MediaPlayer.dll and AxMediaPlayer.dll for the Media Player control msdxm.ocx.
aximp c:/systemroot/system32/msdxm.ocx

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

如果不包装一下直接用,会出现 灾难性 错误。上面已经说明了原因。

在项目中引用生成的ax开头的dll,在窗体代码中增加:
声明一个公有的控件对象:
public AxISPICRECLib.AxISPICREC AxISPICREC;
在InitializeComponent()方法内初始化控件:
AxISPICREC = new AxISPICRECLib.AxISPICREC();//必须new对象,否则窗体设计器出问题
            ((System.ComponentModel.ISupportInitialize)(this.AxISPICREC)).BeginInit();//初始化开始
            this.Controls.Add(this.AxISPICREC);//添加控件
            ((System.ComponentModel.ISupportInitialize)(this.AxISPICREC)).EndInit();

如果不这样做,会出现引发类型为“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常。

            this.AxISPICREC.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("AxISPICREC.OcxState")));//设计控件状态

如果遇到“正试图在 os 加载程序锁内执行托管代码”这个错误,请设置“调试”--“异常”
"----"Managed Debugging Assistants"中勾掉"LoaderLock" 就可以了。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 将第三方OCX控件封装为新的OCX是指将已有的第三方OCX控件通过包装和封装的方式,生成一个新的OCX控件,使其具有更好的灵活性和适用性。 首先,我们需要了解第三方OCX控件的功能和使用方式。通过研究文档、源代码和示例,我们可以了解其各种属性、方法和事件。 接下来,我们可以创建一个新的OCX项目,并将第三方OCX控件的代码和资源文件添加到项目。然后,我们可以对原有的代码进行修改和优化,以更好地适应项目需求。 在封装过程,我们可以考虑对第三方OCX控件的界面进行重新设计,以确保其与项目的整体风格和界面一致。我们还可以增加新的属性、方法和事件,以提供更多的灵活性和扩展功能。 另外,在封装过程,我们需要考虑跨平台的兼容性。将第三方OCX控件封装为新的OCX时,我们需要修改代码,确保其能够在不同的操作系统和开发环境下正常运行。 为了确保封装后的新OCX控件的稳定性和可靠性,我们还需要进行充分的测试。我们可以编写测试用例,并使用各种情况对新的OCX控件进行全面测试,以验证其功能是否符合预期。 最后,我们还需要编写使用新OCX控件的文档和示例代码,以方便其他开发人员使用和集成进他们的项目。 总结起来,将第三方OCX控件封装为新的OCX,需要仔细研究其功能和实现方式,进行代码的修改和优化,进行兼容性测试,并编写使用文档和示例代码。通过这些步骤,我们可以生成一个更加灵活和适用的新OCX控件,满足项目的需求。 ### 回答2: 将第三方OCX控件封装为新的OCX,可以通过以下步骤进行: 1. 导入第三方OCX控件:将第三方OCX控件的文件导入到开发环境,例如Visual Studio。确保已经安装了相关的依赖库和运行时环境。 2. 创建新的OCX工程:在开发环境创建一个新的OCX工程,用于封装第三方OCX控件。可以选择不带界面的ActiveX控件,以确保封装的控件只提供接口和功能,而不涉及界面显示。 3. 导入第三方OCX控件到新的OCX工程:在新的OCX工程,通过相关的功能或者宏命令,导入第三方OCX控件。这样就可以在新的OCX使用第三方OCX的功能和接口。 4. 封装新的接口:根据实际需求,对第三方OCX控件的接口进行封装。可以根据项目特定的需求,对接口进行增加、删除或者修改,以适应更好的使用。 5. 提供新的OCX控件接口:在新的OCX控件,可以提供更简洁、易用和灵活的接口,以方便其他开发者使用该控件。可以考虑提供详细的文档和使用示例,以便其他用户更好地理解和使用该控件。 6. 进行测试和优化:在封装和提供接口之后,进行充分的测试,确保新的OCX控件的功能和接口能够正常工作,并符合预期。可以根据测试结果进行优化和修复bug,提高控件的性能和稳定性。 通过以上步骤,可以将第三方OCX控件封装为新的OCX,提供给其他开发者使用。这样可以根据项目的实际需求,对控件进行定制和优化,提供更好的使用体验和功能扩展。 ### 回答3: 将第三方OCX控件封装为新的OCX是指将第三方提供的OCX控件进行二次封装,以适应特定的需求以及使用环境。这种封装可以提供更简单、更高效的接口,同时可以隐藏底层复杂性,提高控件的可维护性和扩展性。 封装新的OCX控件的过程首先需要了解原始OCX控件的功能和接口。通过研究原始控件的使用方式和内部实现,我们可以对控件的功能进行拆分,并确定需要封装的功能点。 接下来,可以使用编程工具(如C++、C#等)创建新的OCX项目,并将原始OCX控件的代码部分集成到新的项目。在集成的过程,需要关注原始控件的依赖项和接口,确保新的封装控件与原始控件的兼容性。 在集成完成后,可以开始封装的工作。将与控件外部交互的接口进行优化,并提供更简单易用的属性、方法和事件。可以为控件添加新的功能或者扩展原有功能,以满足特定需求。同时,还可以针对性地进行性能优化,提高控件的执行效率。 封装完成后,需要进行测试和验证。测试环节主要验证新的OCX控件在不同的环境和使用场景下的稳定性和可靠性。通过对控件进行全面的功能测试和性能测试,确保控件的稳定性和性能满足预期要求。 最后,可以将封装完成的新的OCX控件进行文档编写和打包发布。在提供给其他开发人员使用时,应提供详细的使用说明和示例代码,以便其他开发人员能够快速上手和使用。 总之,将第三方OCX控件封装为新的OCX是为了提供更好的接口和更灵活的功能,以满足特定需求。这需要对原始控件进行理解和分析,并在封装过程进行优化和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值