Type Pens RedPenNum As Long GreenPenNum As Long B1uePenNum As Long End Type 这时,只要在VB和VC++中对该结构采用相同的定义,并充分注意到VB和VC++对某些数据类型(如32,位操作系统下,VC++中的int和VB中的Integer)存储上的差异,就不会发生参数传递错误。
Type Person Age As Long Height As Double End Type 造成Height值丢失的原因是由于在VC++中存储Person型变量时,将自动在Long型成员Age和Double型成员Height之间插入若干字节的分隔空间,而VB则不会。所以,VC++中存储一个Person型变量需要的内存要多于12字节,而VB只需要12个。因此,从VB传入DLL库函数的Person型变量就不能被正确接收。
Type Person Age As Long Tempst As String*4 Height As Double End Type 于是,Double型成员Height之前的所有成员占用的内存总数变成了8个字节,是8的整数倍。此时,将DLL库函数中对Person的定义作同样的修改后,就可以正确接收从VB传来的Person型参数了。