我有一个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。
答案 0 :(得分:2)
这是类型库的已知问题。事实上,它是出于非常模糊的原因而设计的,几乎肯定与不知道读取类型库的编译器是否对外壳敏感有关。基本编译器不是,C ++编译器。该修复程序很粗糙,但它没有按使用情况对标识符进行分类。
如果之前的任何声明你的结构声明中还包含一个名为“type”的标识符,那么其余的标识符将使用第一个标识符的字母大小写。最意想不到的情况是它是方法参数的名称,通常以小写形式编写。 Bummer如果“Type”是一个属性的名称,它将被重命名为“type”。原油部分。
唯一的解决方法是使用不会发生冲突的更具体的名称。