Subject:
函数列表“Match All Parts”在10.4不对
[Print This Page]
Author:
hq200306
Time:
2020-5-29 22:07
Subject:
函数列表“Match All Parts”在10.4不对
我从github下了最新的cnpack,编译安装在10.4,发现函数列表“Match All Parts”在10.4不对,只能匹配一个字符,但10.3的正确
Image Attachment:
函数过程列表.png
(2020-5-29 22:07, 106.66 K) / Download count 461
http://bbs.cnpack.org/attachment.php?aid=1127
Author:
Passion
Time:
2020-6-2 11:32
已修正,下一每日构建版鸡翅。
原因是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就得到一个乱码。
Author:
Passion
Time:
2020-6-2 11:33
鸡翅->集成。
Author:
hq200306
Time:
2020-6-2 16:38
试了,现在可以了
Author:
hq200306
Time:
2020-6-2 16:43
//pascal
function Test(C: PWideChar): WideChar;
begin
Result := C^;
end;
//
var
C: WideChar;
begin
C := 'a';
C := Test(@c);
[
本帖最后由 hq200306 于 2020-6-2 16:51 编辑
]
Author:
hq200306
Time:
2020-6-2 16:56
我对比了下10.4,10.3的汇编,10.4编译器将“a”转成字符串,再调用,区别太大了
var
C: WideChar;
begin
C := 'a';
C := Test(PWideChar(C));
Welcome to CnPack Forum (http://bbs.cnpack.org/)
Powered by Discuz! 5.0.0