在C#中使用c++编译的ocx的方法

1、在c#工程文件中,使用c++等其他语言编译的ocx组件时,若为WinForm工程则不会报错,
若使用WPF等其他类型的工程,在调用组件内的方法时,会报错:

灾难性故障
未处理 System.Runtime.InteropServices.COMException
Message="灾难性故障 (异常来自 HRESULT:0x8000FFFF (E_UNEXPECTED))"
Source="mscorlib"
ErrorCode=-2147418113

解决办法:

aximp路径(vs2012)C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools
使用aximp(ActiveX控件导入程序),将 ActiveX 控件的 COM 类型库中的类型定义转换为 Windows 窗体控件。
详见http://msdn.microsoft.com/zh-cn/library/8ccdh774.aspx

Aximp.exe 一次转换整个 ActiveX 控件类型库,并产生一组程序集,这些程序集包含在原始类型库中定义的类型的公共语言运行时元数据和控件实现。
生成的文件按照下面的模式命名:

COM 类型的公共语言运行时代理:progid.dll

ActiveX 控件的 Windows 窗体代理(其中 Ax 表示 ActiveX):Axprogid.dll

方法:在cmd命令提示符窗口,输入如下命令:
aximp e:\PIS2004.ocx

将生成的PIS2004Lib.dll和AxPIS2004Lib.dll引用到工程文件中。

2、在c#的工具箱内,添加COM组件PIS2004.ocx,工具箱内显示不出来,无法将其作为控件拖拽到窗体上。
此时需要通过ActiveX 控件的 Windows 窗体代理AxPIS2004Lib.dll,在后台代码中实例化一个控件,并添加到窗体中。
事先需要添加引用:System.Windows.Forms,WindowsFormsIntegration。


例:
// 创建 host 对象,用于承载AxtiveX控件
WindowsFormsHost host = new WindowsFormsHost();

//实例化AxtiveX控件
AxPIS2004Lib.AxPIS2004 objAxPIS2004 = new AxPIS2004Lib.AxPIS2004();


//开始初始化ocx对象
objAxPIS2004.BeginInit();

objAxPIS2004.Height = 200;
objAxPIS2004.Width = 200;

// 结束初始化
objAxPIS2004.EndInit();

//将控件添加到host中
host.Child = objAxPIS2004;

// 将控件显示在页面上(其中skp_PIS2004为窗体上一个用于放置控件的容器StackPanel)
this.skp_PIS2004.Children.Add(host);

进行完上述步骤之后,ocx内的方法就可以正常使用了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值