繁体   English   中英

将C ++结构转换为C#的最简单方法是什么?

[英]what is the easiest way to a convert a c++ struct to c#?

这只是一个例子

我有一个这样的C ++结构:

typedef struct _cdm_status {
    BYTE error_cd;
    BYTE sensor[9];  
} SDMSTATUS, *LPSDMSTATUS;

C#等效项是什么?

在该示例中如何使用它?

[DllImport("MFSSDM.dll")]
public static extern bool MFSCommSDM_Status(LPSDMSTATUS lpStatus);
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct _cdm_status {
  public Byte error_cd;
  public fixed Byte sensor[9];  
}
public class _cdm_status
{
    public byte error_cd;
    public byte[] sensor = new byte[9];
}

C#没有typedef,因此您不必使用实际的类型名称“ _cdm_status”来代替将类型称为“ SDMSTATUS”。

似乎您正在尝试转换结构,以便可以使用p / invoke将其传递给本机函数。 我会这样做:

public struct SDMSTATUS 
{
    public byte error_cd;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst=9)]
    public byte sensor[];  
}

然后,要声明该函数,必须确保传递了指向该结构的指针。 因此,像这样声明p / invoke:

[DllImport("MFSSDM.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern bool MFSCommSDM_Status(ref SDMSTATUS Status);

我假设调用约定为cdecl ,但是您需要替换为真值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM