打个比方吧,先新建ActiveX DLL,在类模块里 Type Student Name As String ID As String Sex As Boolean End Type 在标准模块里 Public Function FindStudent(ByRef AStudent As Student) AStudent.Name = "Mike" AStudent.ID = "10000" AStudent.Sex = 1 End Function 编译生成标准DLL,UDCDll.dll,然后新建EXE,在标准模块里 Type Student Name As String ID As String Sex As Boolean End Type Public Declare Function FindStudent Lib "C:\Program Files\Microsoft Visual Studio\VB98\UDCDll.dll" (ByRef AStudent As Student) 在窗体里 Private Sub Command1_Click() Dim ABC As Student Call FindStudent(ABC) Label1.Caption = ABC.Name Label2.Caption = ABC.ID Label3.Caption = ABC.Sex End Sub 运行时点击按钮,什么报错信息和运行结果都没有,VB窗口直接就关掉了。 本人VB很菜,不知哪儿有问题,还请指点,谢谢。
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, Optional ByVal Length As Long = 4) Public Declare Function FindStudent Lib "C:\Program Files\Microsoft Visual Studio\VB98\UDCDll.dll" (Byval AStudent As long) Dim ABC As Student dim p1 as long CopyMemory p1,byval varptr(abc),4 FindStudent p1 试试
打个比方吧,先新建ActiveX DLL,在类模块里Type Student Name As String ID As String Sex As Boolean End Type在标准模块里 Public Function FindStudent(ByRef AStudent As Student) AStudent.Name = "Mike" AStudent.ID = "10000" AStudent.Sex = 1 End Function自己定义的类型和调用类型的公用函数不能放在同一个工程里 解决方案有两个: 一、分拆成两个工程 工程A定义类型 工程B引用工程A后,可以用所有A中的自定义类型二、修改函数定义,将Public前缀去掉(实际变为private)或将"ByRef AStudent As Student"这样的直接定义类型修改为"ByRef AStudent As Variant"不影响功能使用
Type Student
Name As String
ID As String
Sex As Boolean
End Type
在标准模块里
Public Function FindStudent(ByRef AStudent As Student)
AStudent.Name = "Mike"
AStudent.ID = "10000"
AStudent.Sex = 1
End Function
编译生成标准DLL,UDCDll.dll,然后新建EXE,在标准模块里
Type Student
Name As String
ID As String
Sex As Boolean
End Type
Public Declare Function FindStudent Lib "C:\Program Files\Microsoft Visual Studio\VB98\UDCDll.dll" (ByRef AStudent As Student)
在窗体里
Private Sub Command1_Click()
Dim ABC As Student
Call FindStudent(ABC)
Label1.Caption = ABC.Name
Label2.Caption = ABC.ID
Label3.Caption = ABC.Sex
End Sub
运行时点击按钮,什么报错信息和运行结果都没有,VB窗口直接就关掉了。
本人VB很菜,不知哪儿有问题,还请指点,谢谢。
http://download.csdn.net/download/dsq2006/1763933
Public Declare Function FindStudent Lib "C:\Program Files\Microsoft Visual Studio\VB98\UDCDll.dll" (Byval AStudent As long)
Dim ABC As Student
dim p1 as long
CopyMemory p1,byval varptr(abc),4
FindStudent p1
试试
打个比方吧,先新建ActiveX DLL,在类模块里Type Student
Name As String
ID As String
Sex As Boolean
End Type在标准模块里
Public Function FindStudent(ByRef AStudent As Student)
AStudent.Name = "Mike"
AStudent.ID = "10000"
AStudent.Sex = 1
End Function自己定义的类型和调用类型的公用函数不能放在同一个工程里
解决方案有两个:
一、分拆成两个工程
工程A定义类型 工程B引用工程A后,可以用所有A中的自定义类型二、修改函数定义,将Public前缀去掉(实际变为private)或将"ByRef AStudent As Student"这样的直接定义类型修改为"ByRef AStudent As Variant"不影响功能使用
http://download.csdn.net/detail/taoguangye/3913144