托管与托管数据类型之间的转换
typedef struct _LPR_RESULT
{
struct _LPR_RESULT* pNext;//头,下一个识别结果的指针
charlicense[16];//车牌
charcolor[8];//颜色
intnColor;
inttype;//车牌类型
intreliability;//整牌可信度
RECTlocation;//车牌在整个图像中的位置
intbright;//亮度评价
intmsDecode;//解码图片的时间
intmsDetect;//车牌检测的时间
intmsLocate;//定位的时间
intmsRecognise;//识别的时间
intmsEncode;//压缩生成图片的时间
LPBYTEpBits;//整车图片
intcbBits;//整车图片图片的大小DWORDdwReserved[61];//保留
}LPR_RESULT;
typedef struct tagRECT
{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT
有这样两个数据结构要转化为C#中托管的数据为型,关键问题是
1.
LPR_RESULT 结构中的成员 struct _LPR_RESULT* pNext;该如何转化,
2 .内存
LRP_RESULT 结构中的成员 LPBYTEpBits; 表示一个内存块,该如何转换(在C#)
[解决办法]
帮你顶
[解决办法]
1.
LPR_RESULT 结构中的成员 struct _LPR_RESULT* pNext;该如何转化,
_LPR_RESULT在C#中定义成类就可以了。类是引用类型,封送到非托管内存就是指针了。
2 .内存
LRP_RESULT 结构中的成员 LPBYTEpBits; 表示一个内存块,该如何转换(在C#)
你可以在C#中直接申请一块非托管内存或用Byte数组实现。
[解决办法]
up
[解决办法]
//看看这样可以吗
public struct LPR_RESULT
{
IntPtr pNext; //头,下一个识别结果的指针
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
char[] license;//车牌
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
char[] color;//颜色
int nColor;
int type;//车牌类型
int reliability;//整牌可信度
RECT location;//车牌在整个图像中的位置
int bright;//亮度评价
int msDecode;//解码图片的时间
int msDetect;//车牌检测的时间
int msLocate;//定位的时间
int msRecognise;//识别的时间
int msEncode;//压缩生成图片的时间
IntPtr pBits; //整车图片
int cbBits; //整车图片图片的大小
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 61)]
uint []dwReserved;//保留
};
[解决办法]
转换好像在MSDN上就有,里面有详细的叙述
[解决办法]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 61)]
改成:
[MarshalAs( UnmanagedType.LPArray)]
因为非托管是指针类型的!
[解决办法]
UP