这只是一个例子
我有一个像这样的 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,因此不要将类型称为“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
,但您需要替换真实值。