第一,鉴于VB的速度和在位操作方面的不足,我用VC来编写一个DLL来实现一些功能。输出的函数YUYVtoRGB24 是没有返回值的。
故在vb下声明用sub实现。如下,Public Declare Sub YUYVtoRGB24 Lib "ColorSpaceConverter.dll" (ByVal width As Long, ByVal height As Long, ByRef src As Byte, ByRef dst As Byte)。
vb下调用用方式YUYVtoRGB24 x, Y, pBuf(0), pDstBuf(0)或者
Call YUYVtoRGB24(1, 1, pDstBuf(0), pDstBuf(0))来调用sub过程。
可在VB中调用出错,"Bad DLL calling convention"。
查看VC调用方式为__declspec,而VB要求必须是stdcall方式,这对没有参数的函数影响不大,但对有参数的函数有影响。
修改VC程序,Project setting/C++的catagory为code generation,calling convention为_stdcall,重新编译生成dll后,vb调试通过。
第二,要注意参数声明错误,c++ int类型是32 bit有符号数,而vb下,
(1)整型(Integer)
整型数用两个字节存储,取值范围是-32768到+32767。
例如:15,-345,654%都是整数型。而45678%则会发生溢出错误。
(2)长整型(Long)
长整型用4个字节存储