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代码,请不要这样做。 –