[英]Marshall an array of structs
我正在從C#調用C ++函數。 作為參數,它接收指向結構數組的指針。
struct A
{
int data;
}
int CFunction (A* pointerToFirstElementOfArray, int NumberOfArrayElements)
在C#中,我創建了相同的結構(作為一個類),並且將其正確編組(正確接收了數組中的第一個元素)。 這是我對C ++結構的C#定義:
[StructLayout(LayoutKind.Sequential), Serializable]
class A
{
int data;
}
第一個元素已正確讀取,因此我知道該結構中的所有字段均已正確編組。 當我嘗試通過元素數組發送時,會發生問題。 如何創建將在單個內存塊(塊)中的類的數組,以便C ++函數可以增加指向該數組的指針?
我想我需要類似於stackalloc的東西,但是我相信那僅適用於原始類型?
謝謝您的幫助。
這並不是要給出明確的答案,而只是您可以使用stackalloc
和不安全代碼完成此操作的stackalloc
。
public unsafe class Example
{
[DllImport("library.dll")]
private static extern int CFunction(A* pointerToFirstElementOfArray, int NumberOfArrayElements);
public void DoSomething()
{
A* a = stackalloc A[LENGTH];
CFunction(a, LENGTH);
}
}
另外,請注意API接受的結構的打包。 您可能需要StructLayout
屬性的Pack
屬性。 我相信默認值為4,但某些API希望為1。
編輯:
為此,您必須將A
的聲明從類更改為結構。
public struct A
{
public int data;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.