自定义类型不能作为参数传递吗? 急 !!!!!

DarkRuler 2005-07-24 01:55:55
定义函数时,如果把自定义类型作为其参数,运行就会出错
“只有在公共对象模块中定义的公共用户定义类型可以作为参数,类模块的公共过程返回类型,公共用户定义类型的字段使用。”

我已经把自定义类型放到模块中,并且是public。但是仍然不行。
怎么样才能使用自定义类型作为参数传递!!
...全文
352 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗷嗷叫的老马 2006-01-19
  • 打赏
  • 举报
回复
我还有一个办法,那就是:

改一下过程参数,把这个自定义类型变量的指针及长度传进去,使用CopyMemory来搞定.

对于楼上的代码,这样改改应该可以:

窗体1
==============================================
Private Sub Command1_Click()
Dim truct1 As structtype
truct1.id = 3
truct1.name = "lname"
'此处把 truct1 传递给form2的 testtru
Form2.SetInfo ByVal VarPtr(truct1), Len(truct1)
Form2.Show 0
End Sub

==============================================


窗体2
==============================================

Option Explicit


Dim testtru As structtype

Public Sub SetInfo(ByVal VarAddress As Long, ByVal VarLen As Long)
CopyMemory ByVal VarPtr(testtru), ByVal VarAddress, VarLen
End Sub

Private Sub Command1_Click()
With testtru
Debug.Print .id
Debug.Print .name
End With
End Sub

==============================================

我的系统是WIN2000PRO,VB6.0 & SP6

不过还是有点问题,就是窗口二里这个值COPY过去后,访问那个字符串过程时出现错误,"内存不能访问".不过访问那个ID串时倒是没有问题.

还不太明白,望高手分析一下.
虾米树 2005-08-05
  • 打赏
  • 举报
回复
关注,我也有这个问题,我想把一个自定义类型的变量从窗体1传递到
窗体2中。代码如下:

公共模块:
==============================================
Public Type structtype
id As Integer
name As String
End Type

==============================================


窗体1
==============================================
Private Sub Command1_Click()
Dim truct1 As structtype
truct1.id = 3
truct1.name = "lname"
'此处把 truct1 传递给form2的 testtru
form2.setinfo(truct1)
Form2.Show 0
End Sub

==============================================


窗体2
==============================================

Private testtru As structtype '这里如果定义成 Public testtru As structtype 编译时报错

Public Sub setinfo(astruct As structtype) '编译不过,出现楼主的那种错误
testtru = astruct
End Sub
==============================================

这种传递方法不行,为什么呢?除了定义全局变量外还有其他的办法吗?
painchen 2005-07-25
  • 打赏
  • 举报
回复
检查模块的属性试试
嗷嗷叫的老马 2005-07-24
  • 打赏
  • 举报
回复
你可以试试使用Variant类型来传递。
crycoming 2005-07-24
  • 打赏
  • 举报
回复
//自定义类型放到模块中,并且是public
如果你是编译成了DLL供别的程序调用,
需要放在类中定义为Public的,类的属性也要Public的
蔡健常熟 2005-07-24
  • 打赏
  • 举报
回复
可以用自定类型传参的:
E.G
这些模块中:
'=========================================================

Public Type Employee '创建用户自定义的类型。
ID As Long '定义元素的数据类型。
Name As String * 20
Address As String * 30
Phone As Long
HireDate As Date
End Type




Public Function ShowName(Name_ID As Employee)
MsgBox Name_ID.Name & "," & Name_ID.ID

End Function

'=========================================================
下面窗体中
'=========================================================
Private Sub Command1_Click()
Dim Test As Employee
Test.Name = "张三"
Test.ID = 123456789
Call ShowName(Test)
End Sub
'=========================================================



简易无忌 2005-07-24
  • 打赏
  • 举报
回复
你可以定义为全局变量,与参数等效。
daisy8675 2005-07-24
  • 打赏
  • 举报
回复
麻烦你举例,否则无法你在讲了些什么意思.

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧