我的 C# 代码有一个struct
我要导出到 COM 的代码。该结构的属性带有奇怪的名称,在 VB6 中甚至不是有效的语法,因此无法访问它们。
有没有办法让这些以正常、可用的名称导出?我错过了一个属性还是什么?
COM/VB6 中名称的格式为:
<original_name>k__BackingField
只有original_name
部分在我的 C# 代码中。
我只能在 VB6 对象浏览器中看到这些疯狂的属性名称,Intellisense 不会显示它。
这是正在构建的(稍微清理过的)代码:
[Guid("....")]
[ComVisible(true)]
public struct MyStruct
{
public string StringA { get; set; }
public string StringB { get; set; }
public MyStruct(string a, string b)
{
StringA = a;
StringB = b;
}
... // some other methods, no fields or properties
}
为了更好地衡量,这里是生成的 IDL:
typedef [uuid(....), version(1.0), custom(xxxx, MyNamespace.MyStruct)]
struct tagMyStruct {
LPSTR <StringA>k__BackingField;
LPSTR <StringB>k__BackingField;
} MyStruct;
如 OleView 所示。我可以看到它包含与k__BackingField
上述相同的内容。因此,这些名称似乎来自 C# typelib 导出过程。