【发布时间】:2018-03-03 22:32:20
【问题描述】:
我创建了一个 .Net 类程序集,最终可能会将其分发给可能希望通过非 .Net 语言(例如 C++)使用它的外部客户。
为此,我试图使其与 COM 兼容。这是我第一次尝试 COM,我可能完全走错了路!
所以我启动了tlbexp MyClassLibrary.dll,但它产生了一堆关于泛型类型的警告:
TlbExp:警告 TX8013117D:类型库导出器警告处理“MyClassLibrary.IFoo.FooMethod(#0),MyClassLibrary”。警告:类型库导出器在签名中遇到泛型类型实例。通用代码可能无法导出到 COM。
有些用于可空类型(我计划用特定类型的结构类型替换这些类型)。其他的是我用过的场合IList<>。
在为后一个问题寻找一个好的解决方案时,我偶然发现了 casperOne 对这个问题的评论:How do I suppress this COM Generics warning?,这似乎表明虽然在 COM 中不允许使用开放式泛型类型,但应该使用封闭式泛型类型。
我暴露的所有场合IList<>的用法我都指定了类型,即它们是封闭的泛型,例如在下面的示例代码中:
public interface IFoo
{
IList<string> FooMethod(IList<string> bar);
}
如果这是正确的,为什么我的封闭泛型类型使用会导致这些警告?我误解了封闭性吗? casperOne 在这方面的评论不正确吗?
【问题讨论】:
标签: c# generics dll com class-library