我想为用C#
编写的遗留程序制作一个Delphi 6
网络解析器模块,并决定使用COM
。 C#模块应该是类库中的COM服务器。对于基类型,一切都很清楚,但是如果解析器返回一个带有struct的对象,如何装饰COM类?返回的对象和结构是否应该以某种方式声明为COM类?
以下是一些代码:
public struct SubitemParseResult
{
public string Field1;
public string Field2;
public string Field3;
}
//Should it be decorated with InterfaceType and Guid too?
public class ItemParseResult
{
public string Field1;
public int Field2;
public datetime Field3;
public SubitemParseResult SubitemField;
}
[InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB")]
public interface IItemParser
{
.................
}
[ClassInterface(ClassInterfaceType.None), Guid("AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA")]
public class ItemParser : IItemParser
{
.....
public ItemParseResult GetAndParse(string code)
{
.....
}
.....
}
答案 0 :(得分:3)
是的,这是允许客户端代码访问成员所必需的。将字段更改为属性。
在COM中使用结构是不确定的,因为它需要一个类型库来使IRecordInfo工作,不知道你将从Delphi获得多少帮助。否则很容易用具有3个属性的接口替换它。