2020-5-29 22:07
hq200306
函数列表“Match All Parts”在10.4不对
我从github下了最新的cnpack,编译安装在10.4,发现函数列表“Match All Parts”在10.4不对,只能匹配一个字符,但10.3的正确
2020-6-2 11:32
Passion
已修正,下一每日构建版鸡翅。
原因是10.4的编译器对PChar与Char形式的转换做了限制,导致行为改变了,详情如下:
假设有一个函数,用PWideChar类型的参数来实际传递一个WideChar,(嫑笑,好多个Windows API就是这么设计的):
function Test(C: PWideChar): WideChar;
begin
Result := WideChar(C);
end;
假设如此调用:
var
C: WideChar;
begin
C := 'a';
C := Test(PWideChar(C));
10.3或以下版本,C仍然得到'a'。但10.4版里,C就得到一个乱码。
2020-6-2 11:33
Passion
鸡翅->集成。
2020-6-2 16:38
hq200306
试了,现在可以了
2020-6-2 16:43
hq200306
//pascal
function Test(C: PWideChar): WideChar;
begin
Result := C^;
end;
//
var
C: WideChar;
begin
C := 'a';
C := Test(@c);
[[i] 本帖最后由 hq200306 于 2020-6-2 16:51 编辑 [/i]]
2020-6-2 16:56
hq200306
我对比了下10.4,10.3的汇编,10.4编译器将“a”转成字符串,再调用,区别太大了
var
C: WideChar;
begin
C := 'a';
C := Test(PWideChar(C));
页:
[1]
Powered by Discuz! Archiver 5.0.0
© 2001-2006 Comsenz Inc.