2014-07-01 54 views
0

我在C#中将多个COM对象实现为本地COM服务器。我的客户是用C++编写的。这次我使用COM对象(C#类)将数据从C++传递到C#,并且工作正常。我只是想,如果这些COM对象只是“数据持有者”,使用C#结构来保存数据会更有效率吗?使用C#结构体将数据从C#COM对象传递到C++

+0

也许吧。也许不会。你为什么不通过比较和分析发现。 –

回答

1

一般不会,特别是来自C#。这取决于您是否编写了正确的 C++代码。结构是一个互操作问题,打包和对齐规则是一个实现细节,很容易让你陷入困境。乘以这个结构成员被封送的变幻莫测的变化,类型有3种常见的方式来封送。字符串和数组从来都不是问题。

编写正确的C++代码需要使用IRecordInfo interface,它使用类型库中的结构定义来知道如何正确编组结构成员。您必须为结构中的每个字段执行此操作。

当您使用进程内COM服务器时,这不会比调用字段的属性getter更快。唯一一种在C#中很容易创建的类型。

您可以忽略此要求,并希望您的C++声明与C#声明匹配。这可能会起作用。但是,通常只有在编组信息的成本太高时才应该这样做。只有当属性获取者的往返行程太高时,通常情况下,对于转换公寓边界的呼叫。就像它对于一个进程外服务器一样。