C++中的两个函数:
函数1:DS_API emDSCameraStatus CameraGetImageBuffer(INT iCameraID, emDSDataType emDataType, BYTE **pbyBuffer);//用于获取相机图像数据首地址。
iCameraID:相机编号。该编号在相机初始化成功后获得。emDataType:指定相机图像数据类型。一个枚举类型
pbyBuffer:相机图像数据首地址。 函数2:DS_API emDSCameraStatus CameraReleaseImageBuffer(INT iCameraID, emDSDataType emDataType, BYTE *pbyBuffer);//用于释放相机图像数据首地址。
iCameraID:相机编号。该编号在相机初始化成功后获得。emDataType:指定相机图像数据类型,枚举类型。 pbyBuffer:相机图像数据首地址。 
另外的备注声明:注意!调用函数“CameraGetImageBuffer”获取图象数据头指针,不使用数据指针时调用函数“CameraReleaseBuffer”,以释放获取的图象数据指针,使相机回归正常工作流程。释放指针之前,指针指向的图像数据不予更新,需释放后重新获取。不可使用释放后的图象数据指针,否则将导致相关的内存错误。
在C#中我是这样写的对应函数1:public static extern emDSCameraStatus CameraGetImageBuffer(int iCameraID,emDSDataType emDataType,ref IntPtr pbyBuffer);
对应函数2:public static extern emDSCameraStatus CameraReleaseImageBuffer(int iCameraID,emDSDataType emDataType,IntPtr pbyBuffer);
我在用C#中是这样调用的:先给pbyBuffer调用Marshal.AllocCoTaskMem分配空间,然后调用函数1:CameraGetImageBuffer传入pbyBuffer这个函数获取图像数据也成功了,再次调用时图像数据不更新,我想应该是CameraReleaseImageBuffer释放没对,请大侠们指点,谢谢!c#c++调用传参

解决方案 »

  1.   

    请问你的对应函数是怎么生成的?
    ocx控件拖上去后,生成的对应函数2中,byte *参数类型都对应成了ref byte,如何才能对应成 ref IntPtr pbyBuffer ???
      

  2.   

    DS_API emDSCameraStatus CameraGetImageBuffer(INT iCameraID, emDSDataType emDataType, BYTE **pbyBuffer)
    ===》
    DS_API emDSCameraStatus CameraGetImageBuffer(int iCameraID, emDSDataType emDataType, ref intptr pbuffer)DS_API 是c++宏,具体要看C++如何定义的
    还有emDSCameraStatus emDSDataType   也要看C++如何定义