aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 11110|回复: 6

API声明和调用问题

[复制链接]

3

主题

5

回帖

48

积分

新手入门

积分
48
发表于 2012-9-6 08:44:21 | 显示全部楼层 |阅读模式
看了api手册的例子,没搞懂.
GetComputerName = ::Kernel32.api("GetComputerNameA","int(str &lpBuffer,int &nSize)"
)
var
ok,name,size = GetComputerName(16, 16)
import console
if(ok)console.log(name)
函数原型是个缓冲区地址,为什么调用的时候可以用16这个数值?

4

主题

852

回帖

4689

积分

荣誉会员

积分
4689
发表于 2012-9-6 09:15:23 | 显示全部楼层
str & 或者 string & 类型的参数,
实参可以使用一个指定缓冲区长度的数值,aardio将会自动分配所需要缓冲区。

参考:
http://www.aardio.com/zh-cn/doc/ ... n/raw/datatype.html


4

主题

852

回帖

4689

积分

荣誉会员

积分
4689
发表于 2012-9-6 09:18:00 | 显示全部楼层
string & 用于str &二进制字符串
str & 用于获取纯文本字符串( 以'\0'为终结符  )

4

主题

852

回帖

4689

积分

荣誉会员

积分
4689
发表于 2012-9-6 09:21:06 | 显示全部楼层
也可以自已分配内存:

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

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

import console

if( ok ){
   
var name = raw.str(buffer);
    console.log( name )
}

3

主题

5

回帖

48

积分

新手入门

积分
48
 楼主| 发表于 2012-9-6 09:36:34 | 显示全部楼层
非常感谢!!!,还是最后这个好理解些,直接传数值太抽象了!!!

52

主题

217

回帖

1708

积分

四级会员

积分
1708
发表于 2012-11-7 12:41:37 | 显示全部楼层
mark ...

0

主题

6

回帖

63

积分

一级会员

积分
63
发表于 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, 2025-5-25 02:50 , Processed in 0.062718 second(s), 24 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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