C#struct:
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 ^
答案 0 :(得分:0)
我设法'修复'我的愚蠢问题!我取代了这个:
public struct Table
{
[MarshalAs(UnmanagedType.LPArray)]
public Parameters[] parameters;
public string Name;
etc...
}
使用:
[MarshalAs(UnmanagedType.ByValArray)]
我之前的印象是,我必须传递stcurt数组的大小,但事实并非如此。
由于 w ^