首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

托管与托管数据类型其间的转换

2011-12-18 
托管与托管数据类型之间的转换typedefstruct_LPR_RESULT{struct_LPR_RESULT*pNext//头,下一个识别结果的

托管与托管数据类型之间的转换
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

热点排行