VB如何将自定义的数据类型传递到DLL?
1个回答
展开全部
某些DLL 过程使用自定义的类型作为参数。(在 C 语言中,自定义类型被称为“结构”,在 Pascal 中被称为“记录”。)正如数组的情况,如果要传递自定义类型的单个成员,只需将其作为一般的数值或字符串变量即可。可以将整个的自定义类型作为一个参数传递,这时需要使用引用方式。自定义类型不能以使用值方式传递。Visual Basic 将传递第一个成员的地址,在内存中其它成员存储在第一个的后面。在有的操作系统上,成员之间可能存在空隙。例如,操作系统环境 DLL 中的某些过程能够接受自定义的表示矩形的数据类型,它的结构如下:Type RECT Left As Long Top As Long Right As Long Bottom As LongEnd Type
下面使用两个接受矩形的过程:DrawFocusRect,在指定的矩形周围绘制虚框;InvertRect,翻转指定矩形的颜色。要使用这些过程,首先在标准模块的声明部分进行声明:Declare Function DrawFocusRect Lib "User32" Alias _"DrawFocusRect" (ByVal hdc As Long, _lpRect As RECT) As LongDeclare Function InvertRect Lib "User32" Alias _"InvertRect" (ByVal hdc As Long, _lpRect As RECT) As LongDim MouseRect As RECT
现在可以使用下面的 Sub 过程调用 DLL:Private Sub Form_MouseDown (Button As Integer, _Shift As Integer, X As Single, Y As Single) ScaleMode = 3 If Button And 1 Then MouseRect.Left = X MouseRect.Top = Y MouseRect.Right = X MouseRect.Bottom = Y End IfEnd SubPrivate Sub Form_MouseUp (Button As Integer, _Shift As Integer, X As Single, Y As Single) ScaleMode = 3 If Not (Button And 1) Then MouseRect.Right = X MouseRect.Bottom = Y InvertRect hDC, MouseRect End IfEnd SubPrivate Sub Form_MouseMove (Button As Integer, _Shift As Integer, X As Single, Y As Single) ScaleMode = 3 If Button And 1 Then DrawFocusRect hDC, MouseRect MouseRect.Right = X MouseRect.Bottom = Y DrawFocusRect hDC, MouseRect End IfEnd Sub
自定义类型的成员可以是对象、数组以及 BSTR 字符串,尽管接受自定义类型的大部分 DLL 过程不希望自定义类型中包含字符串数据。如果字符串成员是固定长度的字符串,它们对于 DLL 将等同于以空字符结束的字符串,在内存中的存储方式也与其它值相同。自定义类型中的变长字符串实际是一组指向字符串数据的指针。每个变长字符串成员需要 4 个字节。注意 如果要将包含二进制数据的自定义类型传递到 DLL 过程中,需要将二进制数据储存在 Byte 数据类型的变量数组中,不要将其存储在 String 变量中。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询