-1

これはほんの一例です

次のような 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);
4

3 に答える 3

3
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct _cdm_status {
  public Byte error_cd;
  public fixed Byte sensor[9];  
}
于 2013-06-19T16:34:56.220 に答える
2
public class _cdm_status
{
    public byte error_cd;
    public byte[] sensor = new byte[9];
}

C# には typedef がないため、型を "SDMSTATUS" として参照する代わりに、実際の型名 "_cdm_status" を使用します。

于 2013-06-19T16:31:48.410 に答える
1

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、実際の値に置き換える必要があります。

于 2013-06-19T16:59:53.720 に答える