CnPack Forum » CnWizards IDE Wizards » 函数列表“Match All Parts”在10.4不对


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.