将具有 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
};
指针的类型应为 System.IntPtr
。