升级到XE8后,我们的一些项目开始破坏数据.看起来像TList实现中的一个错误.
program XE8Bug1;
{$APPTYPE CONSOLE}
uses
System.SysUtils, Generics.Collections;
type
TRecord = record
A: Integer;
B: Int64;
end;
var
FRecord: TRecord;
FList: TList<TRecord>;
begin
FList := TList<TRecord>.Create;
FRecord.A := 1;
FList.Insert(0, FRecord);
FRecord.A := 3;
FList.Insert(1, FRecord);
FRecord.A := 2;
FList.Insert(1, FRecord);
Writeln(IntToStr(FList[0].A) + IntToStr(FList[1].A) + IntToStr(FList[2].A));
end.
Run Code Online (Sandbox Code Playgroud)
此代码在XE7和之前(应该是)打印"123",但在XE8中打印"120".也许有人知道这个的quickfix?
更新:非正式修复在这里
此单元无法使用"[DCC致命错误] Test.pas(22)在XE2 Update 3中编译:F2084内部错误:URW1147"
unit Test;
interface
type
TSorter<T> = procedure(var Values: array of T);
TTest = class
public
procedure Sort<T>(const Sorter: TSorter<T>);
end;
implementation
procedure TTest.Sort<T>(const Sorter: TSorter<T>);
begin
end;
end.
Run Code Online (Sandbox Code Playgroud)
我已提交质量控制报告:QC#103671.
有没有人对此有解决方法?
此单元无法在XE2 Update 3中编译,并显示错误"内部错误:SY6315".在XE中没有这样的问题.
unit Test;
interface
uses
SysUtils;
var
Proc: TProc;
implementation
initialization
Proc := procedure
var ByteArr: array of Byte;
begin
SetLength(ByteArr, 10);
end;
end.
Run Code Online (Sandbox Code Playgroud)
有没有人有这个问题的经验?
更新:我已提交质量控制报告:QC#102888.
我总是尝试禁用未使用的软件包以节省一些IDE内存.所以在XE8u1中我尝试通过在注册表中将"$(BDS)\ Bin\GetIt220.bpl"重命名为"_GetIt"来禁用GetIt(我从不使用它).之后GetIt按预期从工具中消失,但出现奇怪的问题:当我尝试调试x64应用程序时,我得到"断开连接的会话"窗口并且IDE挂起.x86调试按预期工作.所有其他包都启用为dafault.也许有人知道GetIt如何触及x64调试器?我很好奇.
下面的项目无法以"访问冲突"错误运行.我使用Delphi XE2 Update 3.
program Project1;
{$APPTYPE CONSOLE}
type
TTestClass = class
public
class procedure Test;
end;
var
TestClass: TTestClass;
class procedure TTestClass.Test;
begin
end;
begin
TestClass.Test;
end.
Run Code Online (Sandbox Code Playgroud)
如果我标记class procedure Test
为"静态",则没有问题.这是'设计'吗?
PS:这是我的错,对我很羞耻.