封送c#类数组作为Struct数组到C
本文关键字:数组 Struct 封送 | 更新日期: 2023-09-27 18:13:46
下面是我的代码:
[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中,我打印出foo[0]的值。StartAddr和Foos[0]. type。
现在我想向结构体添加一个无参数构造函数,这意味着我必须切换到一个类。仅将c#声明从"结构"更改为"类"会导致损坏的值被传递到基于C的DLL。
我相信这应该工作,但我认为我错过了一个步骤。如何将c#类数组作为结构数组传递给C代码?
谢谢!安迪
如果你需要struct中的默认项,你可以给它添加静态属性
[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