设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4408|回复: 13
打印 上一主题 下一主题

[已经过期] Win32API.new的参数类型为浮点数或长整数时用什么符号表示?

[复制链接]

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
跳转到指定楼层
1
发表于 2014-6-29 12:57:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
百度上搜索到 参数3 字符串数组 表示每个参数的类型 L代表Long P代表Point I代表Int V代表Void (在实际使用的时候HResult和各种Handle都是Long,字符串是P)

但却没浮点数或长整数时用什么符号表示
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6438
在线时间
1274 小时
注册时间
2013-8-21
帖子
3657

开拓者

2
发表于 2014-6-29 13:05:41 | 只看该作者
反正在下一直是ipipipip…………

点评

对于double和longlong的返回值是存储在eax和edx寄存器  发表于 2014-6-29 13:26
萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
3
 楼主| 发表于 2014-6-29 13:18:08 | 只看该作者
克莉丝 发表于 2014-6-29 13:08
又需要用这两种数据类型的api么

有,比如ULONGLONG WINAPI GetTickCount64(void);,不过我现在需要调用的API返回的是double

点评

知世拍摄小樱的执念铸就了一款游戏,可惜模拟器无法玩这游戏  发表于 2014-6-29 13:58
哇,头像里面有SAKURA酱。好萌好萌  发表于 2014-6-29 13:26
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39679
在线时间
7485 小时
注册时间
2009-7-6
帖子
13483

开拓者贵宾

4
发表于 2014-6-29 13:25:25 | 只看该作者
浮点数是指针,p
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
112
在线时间
551 小时
注册时间
2012-8-18
帖子
1429
5
发表于 2014-6-29 13:31:54 | 只看该作者

点评

“*请注意虽然pack能处理32位和64位浮点数,但Win32API不能,还是只能用pack做中介” 这里所谓的pack是什么?  发表于 2014-6-29 13:36
我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
6
 楼主| 发表于 2014-6-29 13:32:58 | 只看该作者
fux2 发表于 2014-6-29 13:25
浮点数是指针,p

对于double和longlong的返回值是存储在eax和edx寄存器,也就是说返回值不是指针而是在寄存器里。用"p"将导致内存访问违规。
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39679
在线时间
7485 小时
注册时间
2009-7-6
帖子
13483

开拓者贵宾

7
发表于 2014-6-29 14:43:06 | 只看该作者
流川枫 发表于 2014-6-29 13:32
对于double和longlong的返回值是存储在eax和edx寄存器,也就是说返回值不是指针而是在寄存器里。用"p"将 ...

那pack一下就好,依旧以指针传过去。

点评

只有参数是传递指针的形式才能够用"p",也就是说如果参数是直接double,汇编将push两次将64位的变量压入堆栈。返回值则是将高位mov到edx,低位到eax。   发表于 2014-6-29 15:10
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
8
 楼主| 发表于 2014-6-29 15:21:17 | 只看该作者
fux2 发表于 2014-6-29 14:43
那pack一下就好,依旧以指针传过去。

@fux2
你看一下汇编

push edx
push eax
call test
-----
//test(double){}
retn 8

上面就是一个什么都不做的浮点参数的函数调用。

如果用"p"
那么就会变成
push eax
call test
这样在返回时retn 8和参数的参数大小4不匹配,会导致堆栈损坏。
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39679
在线时间
7485 小时
注册时间
2009-7-6
帖子
13483

开拓者贵宾

9
发表于 2014-6-29 15:53:49 | 只看该作者
流川枫 发表于 2014-6-29 15:21
@fux2
你看一下汇编


所以我叫你pack一下啊。dll里取址就行。
你硬要直接传过去默认是不支持的。

点评

那个pack是做什么用的我还不清楚,写个例子吧  发表于 2014-6-29 16:17
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
10
 楼主| 发表于 2014-6-29 16:14:55 | 只看该作者
fux2 发表于 2014-6-29 15:53
所以我叫你pack一下啊。dll里取址就行。
你硬要直接传过去默认是不支持的。  ...

比起纸上谈兵不如给个范例代码吧
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-28 12:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表