1.pinvoke结构不对称,添加语句(网上有)
2.含回调函数,成员参数的结构体必须完全,尽管自己用不到。
3.加深对c++指针的理解。一般情况下,类型加*等效于c++中的ref。但对于short* 、float*等,根据具体的内容来进行确定类型。
这次例子用到的内容就是地址。c#用IntPtr来代替。
而传参的时候,c#这样声明与运用:
int iImageW = pY16Info.ImgWidth;//图像宽 int iImageH = pY16Info.ImgHeight;//图像高 IntPtr pOpque = pY16Info.pOpque; int size = Marshal.SizeOf(typeof(float)); IntPtr infosIntptr = Marshal.AllocHGlobal(pY16Info.ImgWidth * pY16Info.ImgHeight * size); GD_DATAS = new float[pY16Info.ImgWidth * pY16Info.ImgHeight]; if ((int)GD_MTC_ERROR_CODE.NO_ERROR == GD_MTC_SDK_GetTempMatrix(pOpque, infosIntptr))//获取实时全图温度 { for (int inkIndex = 0; inkIndex < pY16Info.ImgWidth * pY16Info.ImgHeight; inkIndex++) { IntPtr ptr = (IntPtr)((UInt32)infosIntptr + inkIndex * size); GD_DATAS[inkIndex] = (float)Marshal.PtrToStructure(ptr, typeof(float)); } } else { GD_DATAS = null; }
4.当遇到棘手问题时候,简便做法就是unsfe来写c#,c++指针参数照搬。但是取地址等其他操作还得用c#自己的。