Marshalling C++ struct with a int* member to C#

I have a C++ structure below:

struct CTMDeviceError {
    struct CTMDeviceInfo sDeviceInfo;
    int32_t              iResultCode;
    int32_t              iExtendedResultCode;
    int32_t *            piDenomination;
    int32_t *            piChangeDue;
};

I have created an equivalent c# structure but I'm having trouble marshalling the int32 * type.

[StructLayout(LayoutKind.Sequential)]
public struct CTMDeviceError
{
    public CTMDeviceInfo deviceInfo;

    [MarshalAs(UnmanagedType.I4)]
    public Int32 resultCode;

    [MarshalAs(UnmanagedType.I4)]
    public Int32 extendedResultCode;

    public ??? denomination;

    public ??? changeDue;
};

I have tried using IntPtr or Int32[] but it Visual Studio shows mismatch errors. Can I please get some advise? Thanks!

This is the rest of the struct details:

c++

struct CTMDeviceInfo {
    enum CTMDeviceType eDeviceType;
    char *             szDeviceModel;
    char *             szDeviceSubModel;
    int32_t *          piDeviceID;
};

enum CTMDeviceType {
    CTM_DEVICETYPE_CASHCHANGER  = 5,
    CTM_DEVICETYPE_CASHACCEPTOR = 15,
    CTM_DEVICETYPE_COINACCEPTOR = 16,
    CTM_DEVICETYPE_OTHER        = 17
};

c#

[StructLayout(LayoutKind.Sequential)]
public struct CTMDeviceInfo
{
    public CTMDeviceType deviceType;

    [MarshalAs(UnmanagedType.LPStr)]
    public string deviceModel;

    [MarshalAs(UnmanagedType.LPStr)]
    public string deviceSubModel;

    public ??? deviceId;
};

public enum CTMDeviceType
    {
        CTM_DEVICETYPE_CASHCHANGER = 5,
        CTM_DEVICETYPE_CASHACCEPTOR = 15,
        CTM_DEVICETYPE_COINACCEPTOR = 16,
        CTM_DEVICETYPE_OTHER = 17
    };

指针的类型应该是System.IntPtr

链接地址: http://www.djcxy.com/p/66602.html

上一篇: 用C#编写固定大小的2D char数组的C ++ Struct

下一篇: 用int *成员将C ++结构编组为C#