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

本文关键字:最简单 方法 是什么 C++ 结构 转换 | 更新日期: 2023-09-27 18:19:08

这只是一个例子

我有一个这样的 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);

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

[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# 没有 typedefs,因此无需将类型称为"SDMSTATUS",而只需使用实际的类型名称"_cdm_status"。

您似乎正在尝试转换结构,以便可以使用 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,但您需要替换 true 值。