Board logo

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 241
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