求c++结构体转c#问题
c++结构定义:如下
转换后c#代码为:
调用dll方法使用该结构体时,使用out 参数获取该结构体时没有问题.
在c#应用程序中赋值时
szDevIp 出错;错误为 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
其他字段都没有问题.
求解;或熟悉类型转换的高手 给写个C#结构
#define BYTE unsigned char
typedef struct __DEV_ENCODER_INFO
{
char szDevIp[DH_MAX_IPADDR_LEN]; // 前端DVR的IP地址
WORD wDevPort; // 前端DVR的端口号
BYTE bDevChnEnable; // 解码通道使能
BYTE byEncoderID; // 对应解码通道号
char szDevUser[DH_USER_NAME_LENGTH_EX]; // 用户名
char szDevPwd[DH_USER_PSW_LENGTH_EX]; // 密码
int nDevChannel; // 通道号
int nStreamType; // 码流类型,0:主码流;1:子码流; 2:snap
BYTE byConnType; // 0:TCP;1:UDP;2:组播
BYTE byWorkMode; // 0:直连;1:转发
WORD wListenPort; // 指示侦听服务的端口,转发时有效
DWORD dwProtoType; // 协议类型,
// 0:兼容以前
// 1:大华二代协议
// 2:大华系统集成协议
// 3:大华DSS协议
// 4:大华rtsp协议
char szDevName[64]; // 前端设备名称
BYTE byVideoInType; // 该解码通道当前视频源类型:0-标清(SD),1-高清(HD),注:设备支持高清通道才有效
char szDevIpEx[DH_MAX_CLIENT_SwitchDecTVEncoderIPADDR_OR_DOMAIN_LEN];// szDevIp扩展,前端DVR的IP地址(可以输入域名)
BYTE bySnapMode; //抓图模式(nStreamType==2时有效) 0:表示请求一帧,1:表示定时发送请求
BYTE byManuFactory; //目标设备的生产厂商,0:Private(大华私有)
BYTE byDeviceType; //目标设备的设备类型,0:IPC
char reserved[48];
} DEV_ENCODER_INFO, *LPDEV_ENCODER_INFO;转换后c#代码为:
[StructLayout(LayoutKind.Sequential)]
public struct DEV_ENCODER_INFO
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string szDevIp; // 前端DVR的IP地址
public ushort wDevPort;// 前端DVR的端口号
public bool bDevChnEnable;// 解码通道使能
public byte byEncoderID;// 对应解码通道号
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string szDevUser;// 用户名
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string szDevPwd;// 密码
public byte nDevChannel;// 通道号
public byte nStreamType;// 码流类型,0:主码流;1:子码流; 2:snap
public byte byConnType;// 0:TCP;1:UDP;2:组播
public byte byWorkMode;// 0:直连;1:转发
public ushort wListenPort;// 指示侦听服务的端口,转发时有效
public uint dwProtoType;// 协议类型,
// 0:兼容以前
// 1:大华二代协议
// 2:大华系统集成协议
// 3:大华DSS协议
// 4:大华rtsp协议
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
public string szDevName;// 前端设备名称
public byte byVideoInType;// 该解码通道当前视频源类型:0-标清(SD),1-高清(HD),注:设备支持高清通道才有效
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
public string szDevIpEx;// szDevIp扩展,前端DVR的IP地址(可以输入域名)
public byte bySnapMode; //抓图模式(nStreamType==2时有效) 0:表示请求一帧,1:表示定时发送请求
public byte byManuFactory;//目标设备的生产厂商,0:Private(大华私有)
public byte byDeviceType;//目标设备的设备类型,0:IPC
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 48)]
public string reserved;
}
调用dll方法使用该结构体时,使用out 参数获取该结构体时没有问题.
在c#应用程序中赋值时
szDevIp 出错;错误为 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
其他字段都没有问题.
求解;或熟悉类型转换的高手 给写个C#结构
...全文
相关推荐
基于C#调用c++Dll结构体数组指针的问题详解
下面小编就为大家分享一篇基于C#调用c++Dll结构体数组指针的问题详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
C#与C++结构体的对应
问题: 使用C#调用一个非托管的VC++的Dll,参数中包含一个结构体指针,C#如何与其对应? 该Dll导出接口: BOOL GetLocalInfo(PLOCALINFO pLocalInfo); 其中,关于PLOCALINFO, 是这样定义的: //C++的结构体,用此结构存储本地信息 typedef struct _Local_Info { char chMain
C# C++ 结构体匹配问题
背景: 在套接字的一端,C#中定义了固定的结构体,然后用该结构体给C++端的另外一端发送消息。 代码: 结构体如下所示: typedef struct _Info { char name[16]; char cipher[16]; char signature[256]; }Info; C#端代码如下: Info myInfo; s
c++转C#工具
c++转C#工具,c++转C#工具.c++转C#工具
C#调用C++封装成DLL的结构体及类
C#调用C++封装成DLL的结构体及类


