我正在将应用程序从c ++转换为C#,并且对处理导入结构的正确方法有疑问。我正在尝试将结构从c dll转换为c#c中的结构看起来像这样
typedef struct card_info
{
ushort r;
ushort s;
enum_a a;
usinged long ul;
ushort n;
ushort* b;
ushort id;
} CARD_INFO;
当我使用[StructLayout(LayoutKind.Sequentaial)]时,数组的大小在c#中为20个字节。但是,如果看一下我的工作c ++代码,它是24个字节。我将C#更改为如下形式:
[StructLayout(LayoutKind.Explicit)]
public struct CardInfo
{
[FieldOffset(0) public ushort r;
[FieldOffset(2) public ushort s;
[FieldOffset(4) public EnumA a;
[FieldOffset(8) public ushort ul;
[FieldOffset(12) public ushort n;
[FieldOffset(16) public UInt32 b;
[FieldOffset(20) public ushort id;
}
这似乎可以编译,但是我不相信这是执行此操作的正确方法。请让我知道这是否正确或是否有更好的方法。
谢谢
最佳答案
usinged long ul;
这是一个错字,但这绝对不是ushort,而是uint。
也不要使用FieldOffset,让编译器将其弄清楚。现在Marshal.SizeOf()将返回24,插入适当的填充量。
b
成员应为IntPtr btw。关于c# - 如何将C结构从dll转换为C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4587793/