问个很菜的问题

javamode 2009-06-16 08:21:14
Public Function readyIC() As Boolean

'打开与读卡器相连的串行口
hPort = CT_open("COM1")
If hPort <= 0 Then
MsgBox "打开COM1端口失败,请检查本机COM1端口是否已被占用。"
Else
'对读卡器复位
ctResult = CT_reset(hPort)
If ctResut <> &H9000 Then
MsgBox "读卡器复位失败,请检查是否正确连接读卡器。"
Else
'检查读卡器是否插入IC卡
presentResult = ICC_present(hPort)
If presentResult <> &H9000 Then
MsgBox "请插入医保卡"
Else
'对IC卡复位失败
resetResult = ICC_reset(hPort, 2, resp)
If resetResult <> &H9000 Then
MsgBox "对医保卡复位失败,请重新插入医保卡"
readyIC() = False
Else
readyIC() = True
End If
End If
End If
End If
End Function

定义了一个vb的函数
在另一个函数里调用
readyIC = readyIC()

readyIC是一个定义在所有函数外的变量

生成ocx 时 开始提示 “赋值号左边的函数调用必须返回变体或对象”
这是说我的 readyIC 不是变体吗
然后我把readyIC定义为此函数内的局部变量
不提示这个了 生成ocx时提示 “缺少数组 ” 为什么会是缺少数组

我想请教一下,vb中定义函数怎么返回值的,我是不是返回值错了

最好能给个例子 我对vb不了解
谢谢了
...全文
29 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
一笑拔剑 2009-06-16
  • 打赏
  • 举报
回复
Public Function readyIC() As Boolean
这里就定义好了
一笑拔剑 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 javamode 的回复:]
楼上意思是说  readyIC 在一个函数里就能直接表示readyIC的调用
那我还用不用定义一个readyIC变量 public readyIC As Boolean 呀
[/Quote]
不用
simon__sun 2009-06-16
  • 打赏
  • 举报
回复
readyIC() = False
Else
readyIC() = True

上面改成
readyIC = False
Else
readyIC = True

javamode 2009-06-16
  • 打赏
  • 举报
回复
楼上意思是说 readyIC 在一个函数里就能直接表示readyIC的调用
那我还用不用定义一个readyIC变量 public readyIC As Boolean 呀
simon__sun 2009-06-16
  • 打赏
  • 举报
回复
这句注释掉就可以了吧
readyIC = readyIC()
贝隆 2009-06-16
  • 打赏
  • 举报
回复
你把ReadIC改成方法不就可以了?
一笑拔剑 2009-06-16
  • 打赏
  • 举报
回复
是的

rets=readyIC()
就自动调用了这个函数了

还有当你用
if readyIC = True then

的时候

vb就自动调用了这个函数了,然后判断他的返回值是不是true
javamode 2009-06-16
  • 打赏
  • 举报
回复
我不调用那个readyIC()函数我就不能得到readyIC的值了吧

readyIC()是一个函数
我就是想写个函数,方便以后再做这写操作了 直接调用就可以了
一笑拔剑 2009-06-16
  • 打赏
  • 举报
回复
或者你可以这样

Public Function Write_Data(cardID) As Boolean
rets = readyIC()
if rets = True then
一笑拔剑 2009-06-16
  • 打赏
  • 举报
回复
Public Function Write_Data(cardID) As Boolean

if readyIC = True then








readyIC = readyIC()

这句去掉因为readyIC这个函数直接就是true或者flase了

你如果其他地方还对这个readyic有定义的话都去掉
dabenbent 2009-06-16
  • 打赏
  • 举报
回复
我也不怎么懂,希望有高手来解决,好让我从中受益~
javamode 2009-06-16
  • 打赏
  • 举报
回复
Public Function readyIC() As Boolean

'打开与读卡器相连的串行口
hPort = CT_open("COM1")
If hPort <= 0 Then
MsgBox "打开COM1端口失败,请检查本机COM1端口是否已被占用。"
Else
'对读卡器复位
ctResult = CT_reset(hPort)
If ctResut <> &H9000 Then
MsgBox "读卡器复位失败,请检查是否正确连接读卡器。"
Else
'检查读卡器是否插入IC卡
presentResult = ICC_present(hPort)
If presentResult <> &H9000 Then
MsgBox "请插入医保卡"
Else
'对IC卡复位失败
resetResult = ICC_reset(hPort, 2, resp)
If resetResult <> &H9000 Then
MsgBox "对医保卡复位失败,请重新插入医保卡"
readyIC = False
Else
readyIC = True
End If
End If
End If
End If
End Function







Public Function Write_Data(cardID) As Boolean
readyIC = readyIC()
if readyIC = True then
'对IC卡PIN进行验证
verifyResult = ICC_verify(hPort, 2, "ffff")
If verifyResult <> &H9000 Then
MsgBox "医保卡验证失败,不能制卡"
Else
'写城镇居民医保卡密码及卡号
writeResult = ICC_write_bin(hPort, 64, 15, cardID)
If writeResult <> &H9000 Then
MsgBox "制卡失败"
Else
'写参保类型
writeResult = ICC_write_bin(hPort, 702, 1, cardID)
If writeResult <> &H9000 Then
MsgBox "写卡失败"
End If
End If
End If

closeCT = CT_close(hPort)
If closeCT <> 0 Then
MsgBox "关闭端口失败"
End If
End Function
一笑拔剑 2009-06-16
  • 打赏
  • 举报
回复
你完整点的代码贴上来

我觉得不一定是这里的问题
一笑拔剑 2009-06-16
  • 打赏
  • 举报
回复
还是“赋值号左边的函数调用必须返回变体或对象”
我觉得如果是这个错误的话

应该是我刚才说的那里


javamode 2009-06-16
  • 打赏
  • 举报
回复
不过错误依旧
javamode 2009-06-16
  • 打赏
  • 举报
回复
明白了
javamode 2009-06-16
  • 打赏
  • 举报
回复
不好意思
看不明白,能不能在我的代码上做些改动
谢谢了
一笑拔剑 2009-06-16
  • 打赏
  • 举报
回复
readyIC() = False
Else
readyIC() = True
改成
readyIC = False
Else
readyIC = True
一笑拔剑 2009-06-16
  • 打赏
  • 举报
回复
你不能定义为本地函数的啊

那样的话返回不给函数了

readyIC()改成readyIC看看

7,763

社区成员

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

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