有无其他 Call Sub 的方法

bobogg 2014-04-19 08:45:53
' Class Test_AA

Public Sub Test()

Call AA(1, 2, 3, 4, 5) ' ---> 标准呼叫法

End Sub

Public Sub AA(a1, a2, a3, a4, a5 )


End Sub



[请问]

除了 Call AA(1, 2, 3, 4, 5) ' ---> 标准呼叫法

有没有其他呼叫法, 例如用 API 可以达成 Call AA(1, 2, 3, 4, 5) 一样的结果

要如何写呢

[目的] 找出比 Call AA(1, 2, 3, 4, 5) 耗时更少 的另外一种呼叫法

thanks


[ps] 不要 CallByName() 因为效能太低
...全文
237 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2014-04-20
  • 打赏
  • 举报
回复
Call AA(1, 2, 3, 4, 5) 已经是最高效的调用方式了,它就是原生的调用,如果你反汇编它的机器码,你会看到,它就是对应几个pop将参数放入堆栈和一个call跳转指令。不可能再高效了。 从写法上说,还可以简化一些,写成AA 1, 2, 3, 4, 5,两者等价。
bobogg 2014-04-20
  • 打赏
  • 举报
回复
请问 ( 看到您也有回覆 C#, 猜测也会C# ) (1) C# 可以用 FastCall 吗 (2) C# 的基础运算 方面 ( 四则运算+ - * / ^ , String处理, String內存配置 , Array 读写 , Call Sub, Call Class ..这几个方面 ) 会比 VB 快吗 ( VB 编译优化已经全开了) 因为算根本不会 C# 之前只测试过 C# 的 GUI , 确定 .Net 的 GUI 特别慢, 慢上几倍以上 ( 这方面输 VB 的 OCX ) 之前都是google搜寻 C#, delphi, VB 效能比较文章, 也找不太到相关文章
threenewbee 2014-04-20
  • 打赏
  • 举报
回复
在delphi也可以指定stdcall强制delphi不使用fastcall,那么你可以观察到速度会慢很多,毕竟寄存器的速度和内存有一个数量级的差别。 甚至这样,vb还是会慢一些,如果你vb使用了variant类型,非本地类型,或者相同的函数实现,VB都会更慢。
threenewbee 2014-04-20
  • 打赏
  • 举报
回复
delphi支持fastcall 也就是不放入堆栈,直接靠寄存器传参数 VB不支持,除非你能改造linker、compiler和vbvm。VB使用stdcall。
bobogg 2014-04-20
  • 打赏
  • 举报
回复
如果 就是对应几个pop将参数放入堆栈和一个call跳转指令 那为何他比较慢 是什么原因呢 测试过 delphi procedure AA(a1: olevariant; a2: olevariant; .....) ; begin end; --> VB 如果要 2秒, delphi 只要1秒 procedure AA(a1: longint a2: longint; .....) ; begin end; --> VB 如果要 2秒, delphi 只要 0.01秒
引用 1 楼 caozhy 的回复:
Call AA(1, 2, 3, 4, 5) 已经是最高效的调用方式了,它就是原生的调用,如果你反汇编它的机器码,你会看到,它就是对应几个pop将参数放入堆栈和一个call跳转指令。不可能再高效了。 从写法上说,还可以简化一些,写成AA 1, 2, 3, 4, 5,两者等价。
threenewbee 2014-04-20
  • 打赏
  • 举报
回复
引用 5 楼 Bobogg 的回复:
请问 ( 看到您也有回覆 C#, 猜测也会C# ) (1) C# 可以用 FastCall 吗 (2) C# 的基础运算 方面 ( 四则运算+ - * / ^ , String处理, String內存配置 , Array 读写 , Call Sub, Call Class ..这几个方面 ) 会比 VB 快吗 ( VB 编译优化已经全开了) 因为算根本不会 C# 之前只测试过 C# 的 GUI , 确定 .Net 的 GUI 特别慢, 慢上几倍以上 ( 这方面输 VB 的 OCX ) 之前都是google搜寻 C#, delphi, VB 效能比较文章, 也找不太到相关文章
C#和VB.NET的科学运算性能会比VB6强5~10倍。你试下就知道了。 但是.NET也不支持fastcall。
  • 打赏
  • 举报
回复
多线程方式调用,ADDRESSOF
本课程主要以口袋西游为例,学习一个网络游戏是怎么通过游戏服务器与玩家客户端进行通信交互的,通过OD,CE等工具对游戏进行调试,找到各个数据基址(例如角色基址,背包基址等),找出游戏里面的功能CALL(例如寻路CALL,打坐CALL等)及参数分析,并且编码实现功能。本课程可以带领你游戏逆向入门可以学会 CE,OD,找游戏基址,功能CALL等实现变态功能可以更深入的理解从高级语言到汇编语言的一个对应过程可以学会 逆向软件  外挂与反外挂 破解防破解  游戏安全的基础知识可以为以后的及逆向高级课程 打下良好的基础可以自己分析游戏数据,用C语言实现游戏外挂功能等重点:  本套课程的重点就是带领大家分析游戏数据,毫不客气的说,各位学完此套课程对分析游戏数据这块会有一个质的飞跃。课程目录  01.课程简介及功能演示  02.CE找人物基址及人物属性偏移  03.OD找人物基址及人物属性偏移  04.创建MFC DLL项目  05.代码实现输出人物信息  06.发包函数概述  07.怎么看待重写的发包函数  08.普通发包与线程发包  09.找打坐CALL及参数分析  10.代码实现打坐CALL  11.喊话CALL及参数分析  12.代码实现喊话CALL  13.找寻路CALL及参数分析  14.代码编写寻路CALL  15.穿装备CALL及参数分析  16.代码实现穿装备CALL  17.NPC对话CALL  18.代码实现NPC对话CALL  19.唤出宠物  20.宠物合体  21.收回宠物  22.取下宠物

7,763

社区成员

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

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