aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 10255|回复: 8

aardio10升级常见问题解答

[复制链接]

166

主题

2154

回帖

1万

积分

管理员

积分
13056
发表于 2016-3-27 00:09:57 | 显示全部楼层 |阅读模式
首先提醒一下大家,因为所有文件都变更了,请不要在aardio10以下的旧版开发环境上 - 直接覆盖aardio10升级,请重新下载aardio10完整版。

因为aardio10基本做到了向下兼容,所以一般不会遇到太多问题,以下所列的基本是一些不常用的库或函数,如果你的程序中没有用到这些,可以跳过。

166

主题

2154

回帖

1万

积分

管理员

积分
13056
 楼主| 发表于 2016-3-27 00:23:49 | 显示全部楼层
aardio 旧版有一个不太方便的地方,就是使用API必须要先声明一次,
例如GDI+这种上千个API的库就是灾难,不但声明写的累,而且创建太多API函数也要占用内存。
关键是这还是一种浪费,因为我们写程序,并不一定会用到全部的API函数。

但在aardio新版中,API函数并不需要先声明,可以直接使用。
例如GDI+中就删除了大量的API函数声明,有些用户说API找不到了,其实你并不需要找API声明,因为可以直接调用API。
即使是API声明,你也可以直接加在任何地方,并不一定非要写到标准库里。所有API都能在MSDN上找到详细的文档和用法。

而且在aardio中使用GDI+,一般都不需要直接调用底层的API,这里以GDI+画虚线为例:
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
plus={cls=
"plus";left=68;top=94;right=599;bottom=382;notify=1;z=1}
)
/*}}*/

import gdip.pen;
winform.plus.onDrawContent =
function(graphics,rc){

   
//创建画笔,画笔pen只能画一个轮廓(画线)
    var pen = gdip.pen( 0xFFFF0000, 1 );
   
   
//设置为虚线
    pen.dashStyle = 2/*_DashStyleDot*/;

   
//画一条线 - 需要指定画笔(Pen)
    graphics.drawLine( pen, 10, 10, 200, 10)
  
   
//删除创建的GDI对象
    pen.delete()  
}

winform.show();
win.loopMessage();

例如 pen.dashStyle 就是对 GdipGetPenDashStyle 这个API的封装(打开gdip.pen 可以查看源码),所以一般没有必要去调用底层API.

最后再提一下,在aardio新版中,API是可以不声明直接调用的,例如:
::User32.MessageBox(0,'UTF8编码字符串','UTF8编码的标题',0)



166

主题

2154

回帖

1万

积分

管理员

积分
13056
 楼主| 发表于 2016-3-27 00:33:31 | 显示全部楼层
aardio10是UTF8编码,字符串函数基本都可以直接支持UTF8,
而非象之前一样需要一些特别的支持库来辅助。如果有GBK编码的文本建议转换为UTF8处理。

string.gbk还有两个功能,
一是把字符串按字符拆分为数组,另外是把汉字转换为拼音。
在 aardio 10 中替代方法如下:

汉字转拼音可使用标准库中的 string.conv.pinyin
import console;

//字符串如何转拼音
import string.conv.pinyin;
console.log( string.conv.pinyin(
"字符串如何转拼音") );

console.pause(
true);

拆分字符更简单,string.split() 函数在旧版中就支持,不指定分隔符时就是按字符拆分,示例:
import console;

var str = "如何按字符为单位拆分字节";
var tstr = string.split(str);
for(i=1;#tstr;1){
    console.log( tstr[ i ] )
}

console.pause(
true);
另外,在aardio10中,UTF16编码的Unicode字符串的下标操作符 - 就是按字符单位拆分的,示例:
import console;

var str = "如何按字符为单位拆分字节";
var ustr = string.toUtf16(str);
for( i=1; #ustr/2 ){
    console.log(
"Unicode值", ustr[ i ] );
    console.log(
"Unicode字符", ustr[[ i ]] )
}

console.pause(
true);


166

主题

2154

回帖

1万

积分

管理员

积分
13056
 楼主| 发表于 2016-3-27 00:37:16 | 显示全部楼层
实际上 aardio 10 已支持 JSON兼容的Unicode编码、解码。
所以web.json中不再需要这函数,可以使用 string.unescape()  函数直接替代 web.json.decodeString() 。

166

主题

2154

回帖

1万

积分

管理员

积分
13056
 楼主| 发表于 2016-3-27 00:44:38 | 显示全部楼层
旧版工程或源码用 aardio 10打开会自动升级为UTF8,并不会乱码。
aardio 10 会检测AAU文件是否有UTF8 BOM头,如果没有则转换为UTF8并加上BOM头,无论是编辑、运行AAU文件,都会有前面的自动升级步骤。

但要注意:
旧版本并不支持UTF8编码,如果你用aardio8再次打开这些文件,那么会出现乱码,AAU文件没关系,只要不保存就没事,但工程文件会自动保存,这就无法还原了,我们无法反过来改变已经发行的旧版使之向上兼容,所以请不要进行此操作,升级旧版工程前就自行备份。

aardio在打开时,会自动检测AAU文件是否与自己关联,如果不是则重新关联。
如果你电脑上aardio8、aardio10并存,要注意这个问题,建议在升级完成后,删除aardio8以避免冲突

166

主题

2154

回帖

1万

积分

管理员

积分
13056
 楼主| 发表于 2016-3-27 00:47:56 | 显示全部楼层
打开HTML,XML文件并不会乱码(注意加上charset编码声明)。
但如果HTML,XML文件直接写在aardio源码中,要加上UTF8编码声明,例如:

wb.html = /**
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
</body>
</html>
**/

166

主题

2154

回帖

1万

积分

管理员

积分
13056
 楼主| 发表于 2016-3-27 00:56:56 | 显示全部楼层
aardio10默认使用Unicode API,详细的请参考帮助文档:
http://www.aardio.com/zh-cn/doc/library-guide/builtin/raw/unicode.html

与Unicode API有关的错误通常是字节长度的问题,
Unicode一个字符占2个字节,在API函数中,有时候需要显式指定接收Unicode字符串的缓冲区长度,这时候要注意分配缓冲区的字节长度要在字符长度上乘2倍. 在WINAPI中,以字节为长度的参数通常用cb前缀(Count of Bytes 缩写),而以字符为长度的通常用cch前缀(Count of Chars 缩写),详细的可参考相关API的MSDN文档。

一般都是输出文本的参数要注意一下这个问题,输入参数一般不用指定。

例如 API
GetLongPathName = ::Kernel32.api("GetLongPathNameW","int(ustring  short,ustring&long,int cchBuffer)")
在调用时需要这样写
var len,path = GetLongPathName( ..io.fullpath(path) ,0x208,0x104);

cchBuffer指定是字符长度为0x104,而参数2指定的0x208为缓冲区的字节长度。

166

主题

2154

回帖

1万

积分

管理员

积分
13056
 楼主| 发表于 2016-3-27 01:01:55 | 显示全部楼层
debug.log fsys.log 等日志文件,写入编码为UTF-8格式,如果旧版程序升级,应更改日志文件路径以创建UTF8文件。
不要跟旧版日志文件混写在一写。

使用 fsys.config,fsys.talbe创建的配置文件,旧版为ANSI编码,新版为UTF8编码,aardio10为兼容旧版配置文件,会在新的配置文件前加UTF8的BOM头,没有BOM头的会自动将ANSI编码转换为UTF8编码。

如果你使用了其他自定义格式的配置文件,可以参考上面的方法,无UTF8 BOM则转换编码。

注意 INI文件存储后仍然会转为ANSI编码,这属于系统限制。

166

主题

2154

回帖

1万

积分

管理员

积分
13056
 楼主| 发表于 2016-3-27 01:08:20 | 显示全部楼层
aardio10代码中禁用所有全角标点(全角空格除外、字符串内部也无此限制)。如果在代码中输入了全角符号,那么在aardio10中会报语法错误,尤其是(),{}这几个符号与半角符号非常接近,要注意不要写错 -- 在aardio10的编辑器中对这些笔误会进行识别并以红色背景高亮显示。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-2-13 09:01 , Processed in 0.068926 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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