一个项目需要两个摄像头同时进行拍照,本来想用两个USB数码摄像头,问的问题一直没有答复,于是改用视频采集卡,控制等用厂家提供的SDK,没有问题了,但在拍照时,声明和调用厂家提供的相关API出现问题,一直提示参数错误。SDK中的API函数原型是这样的:
? UINT WINAPI HY_GetVideoMemSnap(UINT unIndex,BYTE *pImgBuf,ULONG unSize)
说明:获取通道内存快照。
参数:UINT unIndex:基于0的Fdo设备索引。
BYTE *pImgBuf:用于获取图像快照的内存缓冲。
ULONG unSize:缓冲区尺寸。
返回:ERR_SUCCESS:操作成功,图像数据保存到pImgBuf指向的内存中。
其他:操作失败。
可能原因:1、当前预览流不处于运行状态
2、缓冲区尺寸太小。
其他错误请参照返回代码。
问题应该是出在第二个参数上:BYTE *pImgBuf。
我试过
UINT HY_GetVideoMemSnap(UINT unIndex,ref string pImgBuf,ULONG unSize)
UINT HY_GetVideoMemSnap(UINT unIndex,ref char pImgBuf,ULONG unSize)
UINT HY_GetVideoMemSnap(UINT unIndex,char pImgBuf[],ULONG unSize)
UINT HY_GetVideoMemSnap(UINT unIndex,ref char pImgBuf[],ULONG unSize)等,返回值都是205,在错误代码表中对应的错误信息是:无效的函数调用参数
请教:这个API函数应该在PB中声明和调用呢?
附:这个函数在C++中的调用
PBYTE pBuffer = new BYTE[unSize];
unRet = HY_GetVideoMemSnap(0,pBuffer,unSize);
------解决方案--------------------
Function int HY_GetVideoMemSnap(INT unIndex,ref string pImgBuf,ULONG unSize) Library "XXX.dll"
xxx.dll是指你调用的动态库
------解决方案--------------------
把你定义和调用的代码贴出来看看!
------解决方案--------------------
1.数据类型无所谓,关键是便以你读取图像后取出。c++就是传一个指针到第二个参数。也其实api只需要一个内存的首地址和内存的长度。
鉴于你取的是图像,取出后应该保存为文件,好像用blob{usize},byte[usize]和char[usize](pb10以下)都不错。
数组方式传入好像写第一个地址即可如:l_byte[1]
--------------------------------------------
最新Powerbuilder混淆器,支持5-12全系列
http://chengg0769.download.csdn.net/
------解决方案--------------------
好几天没来,我是专门来顶贴学习的
------解决方案--------------------
pb10以上
UINT WINAPI HY_GetVideoMemSnap(UINT unIndex,ref blob pImgBuf,ULONG unSize)Library "XXX.dll" alias for "HY_GetVideoMemSnap;ansi"
subroutine FillMemory( ref blob b,int len,byte lbyte) library "kernel32.dll" Alias for "RtlFillMemory"
调用:
pImgBuf = blob(space(unSize),EncodingANSI!)
FillMemory(pImgBuf,unSize,0)
HY_GetVideoMemSnap(unIndex,pImgBuf,unSize)