C#类调用OCX控件-急(300分赠送)

fyanglexh 2011-05-07 04:21:13
目前遇到个难题

已有一个现成的ocx,该ocx内有一些自动触发的事件,在c#的winform内调用一切ok。

现在需要用c#写一个dll来调用这个ocx,问题在于不知道该如何调用ocx内的事件,因为没有窗口,无法将ocx直接托拽到窗口上,
仅仅通过引用那个ocx来调用代码会报错。

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

我做了如下尝试:
在一个winform上,将ocx托拽到界面上,自然一切ok。

然后将InitializeComponent中的this.Controls.Add(这个ocx对象) 语句注释掉,因为要使用dll 调用ocx,显然不可能有this.Controls。

就报错了
引发类型为“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常。

我查了下,msdn的解释是:只有在完成对 ActiveX 控件的实例化和初始化之后,才可以引用 ActiveX 控件的公有属性和方法,否则就会引发 AxHost.InvalidActiveXStateException 异常。
连接如下:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.axhost.invalidactivexstateexception(VS.80).aspx连接如下:

dll中无法对ocx进行实例化啊,怎么办呢?
...全文
348 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
乔当家 2011-08-09
  • 打赏
  • 举报
回复
看了以上各位的回复,好像大家对这方面有一定的见解,小弟在这先感谢大家了,麻烦大家教教下小弟...
fyanglexh 2011-05-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jointan 的回复:]
很容易明白的,你如果懂得COM原理,在.Net中写个回收器,或容器,绝对不是问题
[/Quote]
能劳烦写个例子说明下否,多谢!
jointan 2011-05-07
  • 打赏
  • 举报
回复
很容易明白的,你如果懂得COM原理,在.Net中写个回收器,或容器,绝对不是问题
fyanglexh 2011-05-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jointan 的回复:]
不需要容器的话,一个变量解决,需要容器的话,扔到一个组件集合中解决,如果这个东西两种接口都不支持,支接Dispose掉,如果非排放到集合中,自已把这个集合(已弄了几多进来)集中Dispose掉不就完了?
[/Quote]

泪呀,没看明白啥意思。
jointan 2011-05-07
  • 打赏
  • 举报
回复
不需要容器的话,一个变量解决,需要容器的话,扔到一个组件集合中解决,如果这个东西两种接口都不支持,支接Dispose掉,如果非排放到集合中,自已把这个集合(已弄了几多进来)集中Dispose掉不就完了?
fyanglexh 2011-05-07
  • 打赏
  • 举报
回复
类中无法添加this.Controls.Add(这个ocx对象) 语句
jointan 2011-05-07
  • 打赏
  • 举报
回复
因为要使用dll 调用ocx,显然不可能有this.Controls。

你这哪来的逻辑?2
jointan 2011-05-07
  • 打赏
  • 举报
回复
然后将InitializeComponent中的this.Controls.Add(这个ocx对象) 语句注释掉,


你谁啊?来这逗闷子是吧?
拿凤姐抵债 2011-05-07
  • 打赏
  • 举报
回复
有没有调用这个语句?
ocx对象 这个ocx对象 = new ocx对象();

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧