[英]Marshalling array of struct (that contains an array of struct) from C# to Delphi (managed to unmanaged)
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
我設法“解決”了我的愚蠢問題! 我替換了這個:
public struct Table
{
[MarshalAs(UnmanagedType.LPArray)]
public Parameters[] parameters;
public string Name;
etc...
}
與:
[MarshalAs(UnmanagedType.ByValArray)]
在給我印象之前,我不得不傳遞stcurt數組的大小,但事實並非如此。
謝謝W
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.