问题描述
我是用vfw里的这个函数capSetCallbackOnFrame,但C#里不能用Vfw.h的头文件,于是我就用了SendMessage,[DllImport("user32",EntryPoint="SendMessageA",CharSet=CharSet.Ansi,SetLastError=true,ExactSpelling=true)]publicstaticexternintSendMessage(inthwnd,intwMsg,intwParam,functionlParam);SendMessage(hHwnd,WM_CAP_SET_CALLBACK_FRame,0,abc);publicdelegatevoidfunction(refinthw,refvideohdr_tagtag);privatevoidabc(refinthw,refvideohdr_tagtag){}但报错说写入内存出错,在网上找到这个http://www.cppblog.com/yanjie2500/archive/2011/03/29/142925.html于是我改成了publicstaticexternintSendMessage(inthwnd,intwMsg,intwParam,[MarshalAs(UnmanagedType.FunctionPtr)]functionlParam)就不报写内存错了,现在报错typeloadException:程序集“mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”中的“System.Byte[33383]”维度太多。现在又是哪的问题呢,是不是调用dll那有什么问题,又或者是capSetCallbackOnFrame是回调视频流过来的,每次一帧,那样回调多了回来后数据就累积多了呢?这只是我个人的看法。
解决方案
解决方案二:
自己顶啊》》》》》》》
解决方案三:
其中的videohdr_tag是:::publicstructvideohdr_tag{publicbyte[]lpData;publicintdwBufferLength;publicintdwBytesUsed;publicintdwTimeCaptured;publicintdwUser;publicintdwFlags;publicint[]dwReserved;}