日期:2014-05-18  浏览次数:20834 次

谁用.net做过视频采集的 进来看看 急啊!!!!!!!!!!
我用的是海康威视DS-400xH系列卡系统SDK做一个视频监控系统,遇到一个函数
int   StartVideoPreview(HANDLE   hChannelHandle,HWND   WndHandle,RECT   *rect,BOOLEAN   bOverlay,int   VideoFormat,int   FrameRate);          
  参数:
  HANDLE       hChannelHandle       通道句柄
  HWND       WndHandle,       窗口句柄  
  RECT       *rect,       窗口内的矩型区域  
  BOOLEAN       bOverlay,       打开或关闭Overlay模式预览    
  int       VideoFormat,       视频格式(见2.1节)      
  int       FrameRate       视频帧率      
说明:启动视频预览,如果在VideoFormat中设置为YUV类型,则系统中的显示卡必须支持硬件Overlay功能,显示卡的颜色必须为16位色或32位色;如果VideoFormat设置为RGB类型,则采用DDRAW模式显示,即视频窗口会覆盖所有位于窗口范围内的图像;   返回:正确为0,其他为第1节定义的错误号;

我是用DLLImport方法导入这个方法的          
    [DllImport( "DS40xxSDK.dll ")]      
    static   extern   int   StartVideoPreview(int   hChannelHandle,int   WndHandle,ref   RECT   rect,bool   bOverlay,int   VideoFormat,int   FrameRate);

但是对于bOverlay,VideoFormat,FrameRate   三个参数不知道什么意思,这个方法我在调用的时候出现   “对   PInvoke   函数“TCL!TCL.Class1::StartVideoPreview”的调用导致堆栈不对称。原因可能是托管的   PInvoke   签名与非托管的目标签名不匹配。请检查   PInvoke   签名的调用约定和参数与非托管的目标签名是否匹配。”的错误,请问是什么地方出错???????????????????

------解决方案--------------------
[DllImport( "DS40xxSDK.dll ")]
public static extern int StartVideoPreview (IntPtr hChannelHandle, IntPtr WndHandle, ref Rectangle rect, bool bOverlay, int VideoFormat, int FrameRate);

private void Form1_Load(object sender, EventArgs e)
{
.....
Rectangle rc = new Rectangle(0, 0, 710,580);
rc = panel1.ClientRectangle;

StartVideoPreview(channelHandle[0], panel1.Handle, ref rc, true, 0x00000020, 25);
}