.net下使用com的问题
首先直接说出问题:经.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