hur.cn - 华软网

 热门搜索

不定参数数量、类型的回调?

  作者:未知    来源:网络    更新时间:2011/6/24
我是新手,大虾们多多指教

不定参数数量、类型的函数指针申明可以是 int (*p)(...)

但是我要做的是
比如a数组(long)有所有参数的指针
b数组用1、2、3、4.。。。。。对应a[]中的指针指向的数据类型
(比如1对应int,2对应long)

已知a数组,b数组,函数指针
那么如何回调这个函数呢




---华软 网友回答---
不要用可变参数,传数组地址就行了啊
---华软网友回复---
调用遵从__cdecl规则,调用方负责清栈,将参数从右至左入栈,完了以后清栈。

例:用函数指针实现printf("%d %d", 1, 2)的调用
[code=C/C++] int (*p)(const char *, ...);
p = &printf;
__asm push 2;  //右数第一个参数入栈
__asm push 1;  //右数第二个参数入栈
(*p)("%d %d");
__asm add esp,8;  //push了n次,就对esp加4*n[code]
---华软网友回复---
C++">int (*p)(const char *, ...);
p = &printf;
__asm push 2; //右数第一个参数入栈
__asm push 1; //右数第二个参数入栈
(*p)("%d %d");
__asm add esp,8; //push了n次,就对esp加4*n

---华软网友回复---
谢谢!!
如果是stdcall呢
(我想尝试vb的回调)
---华软网友回复---
汇编一窍不通啊
__asm push 如果要压入12324543654这样一个long数据可以吗
---华软网友回复---
顶一下!
---华软网友回复---
stdcall是调用方处理栈,无法实现
---华软网友回复---
stdcall不能使用可变参数

push是压入一个32位数到栈,只要在此范围的数就可以一次压入
---华软网友回复---
顶一下!
---华软网友回复---
引用 8 楼 kyotrue 的回复:
stdcall不能使用可变参数

push是压入一个32位数到栈,只要在此范围的数就可以一次压入


谢谢,学习了

那么有什么办法可以实现vb回调么      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。