将具有 int* 成员C++结构编接到 C#

本文关键字:结构 C++ 成员 int | 更新日期: 2023-09-27 18:32:07

我在下面有一个C++结构:

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

我已经创建了一个等效的 c# 结构,但在编组 int32 * 类型时遇到问题。

[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;
};

我尝试使用IntPtr或Int32[],但它Visual Studio显示不匹配错误。我可以得到一些建议吗?谢谢!

这是结构体详细信息的其余部分:

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
    };

将具有 int* 成员C++结构编接到 C#

指针的类型应为 System.IntPtr