| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1675 人关注过本帖
标题:请问以下函数地址作为函数参数的代码为何总不能通过编译?
取消只看楼主 加入收藏
shi781203
Rank: 2
来 自:广东省
等 级:论坛游民
帖 子:112
专家分:50
注 册:2011-3-18
结帖率:37.14%
收藏
已结贴  问题点数:20 回复次数:4 
请问以下函数地址作为函数参数的代码为何总不能通过编译?
请问以下函数地址作为函数参数的代码为何总不能通过编译?

Dim x As Integer, y As Integer

Public Function a(x As Integer) As Integer
    a = x
End Function

Public Function b(y As Integer) As Integer
    b = y
End Function

Public Function c(ByVal a As Integer, ByVal b As Integer) As Integer
    c = a + b
End Function

Private Sub Command1_Click()
    Label1.Caption = c(AddressOf a, AddressOf b)
End Sub

Private Sub Form_Load()
    x = 3
    y = 6
End Sub

请高手指点指点……
2016-06-10 13:13
shi781203
Rank: 2
来 自:广东省
等 级:论坛游民
帖 子:112
专家分:50
注 册:2011-3-18
收藏
得分:0 
以下是引用ZHRXJR在2016-6-10 16:11:47的发言:

Dim x As Integer, y As Integer

Public Function a() As Integer   '函数仅仅输出a,定义函数类型即可
    a = x
End Function

Public Function b() As Integer   '函数仅仅输出b,定义函数类型即可
    b = y
End Function

Public Function c() As Integer   '函数仅仅输出c,定义函数类型即可
    c = a + b
End Function

Private Sub Command1_Click()
    Label1.Caption = c   '得到c函数的输出
End Sub

Private Sub Form_Load()
    x = 3
    y = 6
End Sub

你这个无参数代码我一早就做成了,你的回复不是我要的答案,我要的是有参数的函数地址作为函数参数--->用作回调函数之用的!

飞点燃费盐--历史上至有型的计算机病毒(能感染你是我的荣幸,也是你的光荣!)
2016-06-10 23:32
shi781203
Rank: 2
来 自:广东省
等 级:论坛游民
帖 子:112
专家分:50
注 册:2011-3-18
收藏
得分:0 
回复 2楼 ZHRXJR
你的回复并没有出现函数地址作为参数来传递到另一个函数的情况(请你审题后再作答吧!)

飞点燃费盐--历史上至有型的计算机病毒(能感染你是我的荣幸,也是你的光荣!)
2016-06-10 23:55
shi781203
Rank: 2
来 自:广东省
等 级:论坛游民
帖 子:112
专家分:50
注 册:2011-3-18
收藏
得分:0 
回复 5楼 wmf2014
感谢你的回复,但还遗漏了最后一个问题,就是为何输出结果只是地址相加,而不是地址的值相加?

飞点燃费盐--历史上至有型的计算机病毒(能感染你是我的荣幸,也是你的光荣!)
2016-06-11 10:42
shi781203
Rank: 2
来 自:广东省
等 级:论坛游民
帖 子:112
专家分:50
注 册:2011-3-18
收藏
得分:0 
以下是引用wmf2014在2016-6-11 12:41:37的发言:

vb里调用回调函数需要用到api,目前我还没找到回调函数传递参数的方法,实现你要求的变通方法如下:
'module1中代码
Function a() As Integer
a = Form1.x
End Function
Function b() As Integer
b = Form1.y
End Function

'form1中代码
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public x As Integer, y As Integer
Public Function c(ByVal a As Long, ByVal b As Long) As Long
    c = CallWindowProc(a, 0, 0, 0, 0) + CallWindowProc(b, 0, 0, 0, 0)
End Function

Private Sub Command1_Click()
    Label1.Caption = c(AddressOf a, AddressOf b)
End Sub

Private Sub Form_Load()
    x = 3
    y = 6
End Sub
'运行后会在标签中显示结果9

'module1中代码
Function a() As String
a = Form1.x
End Function
Function b() As String
b = Form1.y
End Function

'form1中代码
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public x As String, y As String
Public Function c(ByVal aCopy As Long, ByVal bCopy As Long) As String
    c = CallWindowProc(aCopy, 0, 0, 0, 0) & vbCrLf & CallWindowProc(bCopy, 0, 0, 0, 0)
End Function

Private Sub Command1_Click()
    Label1.Caption = c(AddressOf a, AddressOf b)
End Sub

Private Sub Form_Load()
    x = "Very"
    y = "Good"
End Sub
为何运行后会在标签中显示结果只有两个地址值而不是两个字符串的输出?

飞点燃费盐--历史上至有型的计算机病毒(能感染你是我的荣幸,也是你的光荣!)
2016-06-12 00:16
快速回复:请问以下函数地址作为函数参数的代码为何总不能通过编译?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029355 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved