簡體   English   中英

從C#到Delphi(托管到非托管)的結構體數組(包含結構體數組)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM