VB如何将自定义的数据类型传递到DLL?

 我来答
易平皖0f78e0
2013-10-20 · 超过54用户采纳过TA的回答
知道答主
回答量:123
采纳率:0%
帮助的人:106万
展开全部
某些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 变量中。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式