使从WCF导入的枚举在COM Interop中可见

时间:2010-12-15 14:08:05

标签: .net wcf com-interop class-library

我有几个WCF服务已导入.Net4类库。创建代理时,会将几个声明为DataContracts的枚举器导入代理。我后来通过COM Interop公开了几个程序用作ActiveX库,我使用导入的枚举器作为这些程序的参数。
在我的类库的过程中,我可以用[ComVisible(true)]公开,以便可以通过COM调用它们。但是,将枚举器作为参数的方法,当我用regasm.exe注册时,我收到错误:

Type library exporter warning processing 'xxxxxx.Method(pEnumerator),yyyyyy'. Warning: Non COM visible value type 'yyyyyy.zzzzzzz.enEnumerator' is being referenced either from the type currently being exported or from one of its base types.

我知道这是因为枚举器没有使用ComVisible公开,但是如果我放入必要的参数,因为它们在代理中,每当我刷新代理时,它们都会被覆盖。反正有吗?
我可以在类库中创建自己的枚举器,用ComVisible公开它们,并执行switch以将导入的枚举器与我创建的枚举器相匹配。但我想避免这种情况。
请求帮助

1 个答案:

答案 0 :(得分:1)

创建一个在客户端和服务之间共享的公共库。在该程序集中添加枚举器,并使用ComVisible标记它们。

从VS创建代理时,有一个复选框(默认选中),允许在当前或引用的程序集中重用类型。选中此选项后,代理将使用共享程序集中的类型,而不是生成新类型。