【发布时间】:2015-10-26 17:02:35
【问题描述】:
C# 结构:
public struct Table
{
[MarshalAs(UnmanagedType.LPArray)]
public Parameters[] parameters;
public string Name;
etc...
}
public struct Parameters
{
public string parameterName;
public string parametervalue;
}
在设计时我不知道“Parameters[] parameters”数组的长度。
所以我可以:
Table[] tables = new Table[RandomNumber];
for (int i = 0; i < RandomNumber; i++)
{
for (int j=0; j<AnotherRandomNumber; j++)
{
tables[i].parameters[j] = new Parameters() { parameterName = "", parametervalue = "" };
}
}
现在我想将表数组传回非托管代码 (Delphi)
界面如下:
int GetTables([Out, MarshalAs(UnmanagedType.LPArray)] out Table[] results);
以及C#中的方法:
public int GetTables(out ReportTable[] results)
但Delphi代码报错:
无法封送字段...数组字段必须与 ByValArray 或 SafeArray 配对。
我尝试了各种 UnmanagedType.xxx 组合,但无论如何都会出错。
有什么想法吗?
谢谢 W
【问题讨论】:
标签: c# com marshalling unmanaged managed