4
這是我的代碼:元帥C#類數組作爲結構陣列爲將C
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Foo
{
UInt32 StartAddr;
UInt32 Type;
}
[DllImport(DllName, EntryPoint="_MyFunc", CallingConvention = CallingConvention.Cdecl)]
static extern unsafe IntPtr MyFunc([MarshalAs(UnmanagedType.LPArray)] Foo[] Foos);
List<Foo> Foos = new List<Foo>();
Foo1 = new Foo();
Foo1.StartAddr = 1;
Foo1.Type = 2;
Foos.Add(Foo1);
MyFunc(Foos.ToArray());
在基於C-DLL打印出FOOS [0] .StartAddr和FOOS [0]。鍵入的值。這很好。
現在我想添加一個無參數構造函數的結構,這意味着我不得不切換到一個類。通過僅將C#聲明從「struct」更改爲「class」,會導致將損壞的值傳遞給基於C的DLL。
我相信這應該有效,但我認爲我錯過了一個步驟。我如何將C#類的數組作爲結構數組傳遞給C代碼?
謝謝!安迪
是的,將無法正常工作。該數組將被封送爲Foo **而不是Foo *。指向Foo的指針數組。沒有乾淨的解決方法,手動編組在這裏非常難看。如果您不能更改C代碼,請不要這樣做。 –