搜索
aardio官方社区 门户 查看主题

API声明和调用问题

发布者: BigBlack | 发布时间: 2012-9-6 08:44| 查看数: 2463| 评论数: 6|帖子模式

看了api手册的例子,没搞懂.
GetComputerName = ::Kernel32.api("GetComputerNameA","int(str &lpBuffer,int &nSize)"
)
var
ok,name,size = GetComputerName(16, 16)
io.open()
if(ok)io.print(name)
函数原型是个缓冲区地址,为什么调用的时候可以用16这个数值?

最新评论

不争 发表于 2012-9-6 09:15:23

str & 或者 string & 类型的参数, 实参可以使用一个指定缓冲区长度的数值,aardio将会自动分配所需要缓冲区。 参考: [url]ht

str & 或者 string & 类型的参数,
实参可以使用一个指定缓冲区长度的数值,aardio将会自动分配所需要缓冲区。

参考:
http://bbs.aardio.com/doc/refere ... l/raw/datatype.html


不争 发表于 2012-9-6 09:18:00

[b][size=4]string & [/size][/b] 用于str &二进制字符串 [b][size=4]str & [/size][/b] 用于获取

string & 用于str &二进制字符串
str & 用于获取纯文本字符串( 以'\0'为终结符  )
不争 发表于 2012-9-6 09:21:06

也可以自已分配内存: GetComputerName = ::Kernel32.api([color=#800000]"GetComputerNameA"

也可以自已分配内存:

GetComputerName = ::Kernel32.api("GetComputerNameA","int(pointer lpBuffer,int &nSize)")

var buffer = raw.buffer(16);
var ok,size = GetComputerName(buffer, #buffer)

io.open()

if( ok ){
   
var name = raw.str(buffer);
    io.print( name )
}
BigBlack 发表于 2012-9-6 09:36:34

非常感谢!!!,还是最后这个好理解些,直接传数值太抽象了!!!

非常感谢!!!,还是最后这个好理解些,直接传数值太抽象了!!!
winner 发表于 2012-11-7 12:41:37

mark ...

mark ...
nemo 发表于 2017-7-27 08:33:35
不争 发表于 2012-9-6 09:21
也可以自已分配内存:

GetComputerName = ::Kernel32.api("GetComputerNameA","int(pointer lpBuffer,in ...

您的回复,解决了我调用delphi封装的dll的问题。非常感谢,自己弄了好几天没有搞定。

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2017-9-25 19:34 , Processed in 0.156250 second(s), 20 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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