gpt4 book ai didi

c# - 将 C# 类数组作为结构数组编码到 C

转载 作者:太空狗 更新时间:2023-10-30 01:24:57 25 4
gpt4 key购买 nike

这是我的代码:

[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 的值。这很好用。

现在我想向结构添加一个无参数构造函数,这意味着我必须切换到一个类。仅将 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

关于c# - 将 C# 类数组作为结构数组编码到 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8036719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com