从C#导出COM组件时命名(小写/大写)的问题

时间:2011-08-31 18:17:30

标签: c# com

我有一个C#COM DLL,它定义了我从C ++ ATL / COM服务器使用的一些接口/类型。 有时候,无论是在我的机器上,还是随机地在我构建相同项目的其他机器上(ATL * .exe和C#DLL)我得到与导出的C#struct成员相关的不同编译错误,这些成员是COM的一部分接口。这是一个例子:

public enum TemporaryPolicyType
{
    UntilTime = 0,
    ForNextMinutes
}

[Guid("6F8CD968-DA76-44CA-B4E1-C495AB5003BD")]
public struct TemporaryPolicyData
{
    public TemporaryPolicyType Type;
    public DateTime Timestamp;
    public DateTime EndTime;
    public int EchartMinutes;
}

例如在这种特殊情况下,C#将在某些机器上“导出”有时,在小写字母上使用“Type”成员,在使用它的其他一些机器上,就像在代码中一样很好。

我正在使用VS 2010。

1 个答案:

答案 0 :(得分:2)

这是类型库的已知问题。事实上,它是出于非常模糊的原因而设计的,几乎肯定与不知道读取类型库的编译器是否对外壳敏感有关。基本编译器不是,C ++编译器。该修复程序很粗糙,但它没有按使用情况对标识符进行分类。

如果之前的任何声明你的结构声明中还包含一个名为“type”的标识符,那么其余的标识符将使用第一个标识符的字母大小写。最意想不到的情况是它是方法参数的名称,通常以小写形式编写。 Bummer如果“Type”是一个属性的名称,它将被重命名为“type”。原油部分。

唯一的解决方法是使用不会发生冲突的更具体的名称。