.net下使用com的问题

hljalong 2013-07-01 05:19:32
首先直接说出问题:经.net包装后的com中ActveX在创建实例后,将其作为参数传递回com中其他类实例的方法时出现类型错误(非.net面向对象环境是不出错的)。无法将包装成.net可调的类型AxCA转换成包装后CA。
下面是问题的详细描述。

com的情况如下:
1.com文件为MyCom.dll
2.com中的类库为Tlib,注册的友好名称为My Type Library
3.类库中有两个类:CA, CB。其中CA是一个ActiveX。
4.CB有的方法中有一个Mx(pCA),即一个CA的实例引用。

使用情况如下:
1..net项目中引用com的类库My Type Library
2.在工具箱的选项卡中添加项,选择com组件中CA的友好名称
3.将CA对应的控件拖到窗体上创建一个实例,默认名称为AxCA1,其类型为AxTlib.AxCA

4.自动生成了两个包装文件Interop.Tlib.dll和AxInterop.Tlib.dll。
5.项目中的多出两个命名空间:Tlib和AxTlib
6.Tlib下有两个类:CA和CB
7.AxTlib下有一个类:AxCA

这时候在.net中对AxCA1的操作都很正常,问题出在调用
CB1.Mx(AxCA1)
错误是无法将类型AxTlib.AxCA强制转换为Tlib.CA

...全文
244 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hljalong 2013-07-05
  • 打赏
  • 举报
回复
我自己没学好,包装后的对象AxCA1提供了一个GetOcx方法,传递回COM时调用它(CB1.Mx(AxCA1.GetOcx())就可以了。
兔子-顾问 2013-07-01
  • 打赏
  • 举报
回复
有点绕,有没有demo的工程发来看看。上传到某处下载看看

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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