[英]Marshal C# Class Array as Struct Array To 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] .Type的值。 這非常有效。
現在我想在struct中添加一個無參數構造函數,這意味着我必須切換到一個類。 通過僅將C#聲明從“struct”更改為“class”,會導致將損壞的值傳遞給基於C的DLL。
我相信這應該有用,但我認為我錯過了一步。 如何將C#類數組作為結構數組傳遞給C代碼?
謝謝! 安迪
如果您需要在結構中使用默認項,則可以向其添加靜態屬性
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Foo
{
UInt32 StartAddr;
UInt32 Type;
public static Foo Default
{
get
{
Foo result = new Foo();
result.StartAddr = 200;
result.Type = 10;
return result;
}
}
}
當你需要創建新的Foo
結構時,只需調用Foo.Default
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.