如何在c ++中读取具有数组的结构

时间:2012-09-29 10:12:31

标签: c# interop

public struct Data
{
    public long id,
    public datetime time;
    public string[] atts;
    public string[] names;
};

Guid("3102C9D3-822E-4359-9383-9B3AF7D39F2C")]
public interface IData  
{
    void GetEvents([MarshalAs(UnmanagedType.LPArray)]out DataResp[] resp);
}

我想传递和接收从C#到c ++ Component的复杂结构,并将其填充到c ++中。 客户端代码就像这样

Lib::Data* data;
long size = svc->GetEvents(&data); 
for(size_t i = 0; i < size; ++i) 
{  
Lib::Data& current = data[i];   
long val = current.Value;  
bstr_t unit = current.Unit;  

任何人都可以帮助我如何从c ++中读取字符串数组,也可以编组日期时间。

1 个答案:

答案 0 :(得分:0)

这样做会遇到几个问题。大多数情况下,您必须使用多个属性来装饰结构。

对于传递字符串,我建议您使用Stringbuilder构建一个C ++预期大小的字符串,这对于它来说已经足够了。

我多次遇到的另一个问题是打包。它改变了结构的排列。要解决此问题,您应确保通过提供适当的属性来顺序对齐结构。

此外,如果它要求您传递任何指针,请确保在传递之前固定对象,否则运行时将更改它。