最近,写了一个VB应用程序,这个APP主要是用来演示三个C++写的视频处理动态链接库的使用方式。第一次写VB的代码,确实遇到了很多问题,现在回想一下,真的是很多东西走了或多或少的弯路,现在把这些东西总结并记录下来,期望以后写兼容VB的动态库,可以注意接口的定义,并不是所有的接口定义方式,都方便VB使用,再者,就是在VB中使用的一些知识积累。
C++写的DLL接口定义需注意的事项
1. 接口中自定义数据类型不能ByVal传递
这次就遇到了这个问题,而且花了很长的时间去验证这个问题,在Dll中有一个函数,如下:
Struct Color
{
Long lBrightness;
Long lcontrast;
Long lhue;
Long lsaturation;
}Color;
BOOL SetColor(Color stuColor);
在VB下需调用此函数,则定义相应的自定义数据和函数:
Type Color
lBrightness As Long
lcontrast As Long
lhue As Long
lsaturation As Long
End Type
Declare Function SetColor lib”A.dll”(ByVal StuColor As Color)As Long
这样看似可以将自定义数据结构中的四个变量都传送下去,但是这在编译时是通过不了的。
最初的时候是期望不用修改dll的接口,只是变换VB的代码将结构中四个数据都传送下去,试了以下方式:
a. 采用ByRef