VB6的函数指针传递

Option Explicit

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 Type MySubParams
    ID As Long
    Name As String
End Type

Sub MySub1(p As MySubParams, a As Long, b As Long, c As Long)
    Debug.Print VarPtr(p)
    MsgBox "MySub1 " & p.ID & " " & p.Name
End Sub

Sub MySub2(p As MySubParams, a As Long, b As Long, c As Long)
    Debug.Print VarPtr(p)
    MsgBox "MySub2 " & p.ID & " " & p.Name
End Sub

Function CallSub(address As Long, params As Long)
    CallSub = CallWindowProc(address, params, 0&, 0&, 0&)
End Function

Sub Start()
    Dim a As Long
    Dim p As MySubParams
    p.ID = 1
    p.Name = "Test1"
    Debug.Print VarPtr(p)
    Debug.Print CallSub(AddressOf MySub1, VarPtr(p))
    p.ID = 2
    p.Name = "Test2"
    Debug.Print CallSub(AddressOf MySub2, VarPtr(p))
End Sub
时间: 2024-08-28 12:42:16

VB6的函数指针传递的相关文章

从cocos2dx中寻找函数指针传递的方法

目的 看到群里有个朋友搞了好几天函数指针传递,没搞好.所以写一篇文章,旨在从cocos2dx中帮朋友们找到如何传递指针. 旧版本的函数指针传递 全局函数函数指针调用 一般在C++11之前,我们一般是这样定义一个函数指针类型. typede void(*pFunc)(int,...); 什么意思呢? typedef void/*return type of function*/ (*pFunc/*the pointer of function*/) (int,.../*the types of f

函数指针传递

void GetMemory(char *p, int num) { p = (char *)malloc(sizeof(char)* num); int i = 0; } int main(int argc,char** argv) {/* char buf1[] = "123"; aa(buf1); */ char *str = NULL; GetMemory(str, 100); return 0; } 先看这个例子,函数GetMemory明显不能分配内存给str,而且还会造成内

函数指针与函数指针数组的使用方法

转自:http://blog.csdn.net/feitianxuxue/article/details/7300291 函数指针与函数指针数组的使用方法 函数指针: 函数指针包含函数在内存中的地址.数组名实际上就是数组的第一个元素在内存中的地址,类似地,函数名实际上也是执行这个函数任务的代码在内存中的起始地址. 函数指针可以传递给函数.从函数返回.保存在数组中.赋予另一个函数指针或者调用底层函数. 下面我们用数值算法accumulate讨论下函数指针的用法.accumulate是一种常用的ST

函数指针及其的运用(上)——何为函数指针

=========================引子========================= 我们都知道,数组名就是指向数组第一个元素的常量指针(详见<数组拾遗>).同理,对于一个函数而言,函数名也是指向函数第一条指令的常量指针.而编译器要做的就是在程序编译之后,为每个函数分配一个首地址,即该函数第一条指令的地址.一般情况下,我们可以用一个指针来保存这个地址,而这个指针就是函数指针,该指针可以看作是它指向函数的别名,所以我们可以用该指针来调用这个函数. ==============

c++中函数参数传递(值传递、指针传递,引用传递)进一步认识

概念 首先从概念上来说一下这几种函数传参方式及区别: 1.值传递:形参是实参的拷贝,改变函数形参的值并不会影响外部实参的值,这是最常用的一种传参方法,也是最简单的一种传参方法,只需要传递参数,返回值那是return考虑的: 2.指针传递:指针传递参数从本质上来说也是值传递,它传递的是一个地址.[值传递过程中,被调函数的形参作为被调函数的局部变量来处理,即在函数内的栈中开辟内存空间以存放由主调函数放进来的实参的值,从而成了实参的一个副本(记住这个,函数内参数的是实参的副本)].由于指针传递的是外部

【转载】函数参数传递(值传递,指针传递)

C语言值传递 地址传递 : 1.值传递 eg: 1     void Exchg1(int x, int y)   2     {   3          int tmp;   4          tmp = x;   5          x = y;   6          y = tmp;   7          printf("x = %d, y = %d\n", x, y);   8     }   9     main()  10     {  11        

C++函数的三种传递方式为:值传递、指针传递和引用传递

值传递: void fun(int x){ x += 5; //修改的只是y在栈中copy x,x只是y的一个副本,在内存中重新开辟的一块临时空间把y的值 送给了x:这样也增加了程序运行的时间,降低了程序的效率. } void main(void){ int y = 0; fun(y); cout<<\"y = \"<<y<<endl; //y = 0; } 指针传递: void fun(int *x){ *x += 5; //修改的是指针x指向的内

向函数中传递指针和传递指针的引用的区别

如果是传递指针,那么会先复制该指针,在函数内部使用的是复制后的指针,这个指针与原来的指针指向相同的地址,如果在函数内部将复制后的指针指向了另外的新的对象,那么不会影响原有的指针:但 是对于传递指针应用,如果将传递进来的指针指向了新的对象,那么原始的指针也就指向了新的对象,这样就会造成内存泄漏,因为原来指针指向的地方已经不能再 引用了,即使没有将传递进来的指针指向新的对象,而是在函数结束的时候释放了指针,那么在函数外部就不能再使用原有的指针了,因为原来的内存已经被释放了 看个例子: #includ

VB6/VBA中跟踪鼠标移出窗体控件事件(类模块成员函数指针CHooker类应用)

前几天发了一篇博文,是关于获取VB类模块成员函数指针的内容(http://www.cnblogs.com/alexywt/p/5880993.html):今天我就发一下我的应用实例. VB中默认是没有鼠标移出事件响应的,而这个事件其实在项目开发中,实用性很强,很多时候需要在鼠标移出窗体或控件时做些事情:没有这个事件会感觉很费力: 今天我所说的实际案例就是,在窗体上,设计一个SplitterBar控件,窗体的最终用户使用这个控件可以在运行程序时任意调整其内部控件大小. 我在第二篇参考博文作者开发的