小编sda*_*rle的帖子

从 D2006 移植到 XE5 后偶尔出现访问冲突,在 XP 兼容模式下不会发生

我们有一个在 Delphi 2006 中运行良好的大型应用程序。我们已将其移至 XE5,并且经常遇到零星的访问冲突。我们正在使用 VCL 表单和许多 DevExpress 和其他第三方组件。我们正在使用带有 Delphi XE Enterprise 版本 19.0.14356.6604 的 Windows 7 Professional。

在移植到 XE5 之后,我们在网上、这里和其他地方查看了有关 A/V 的帖子,但没有发现任何似乎与我们的问题相关的内容。

以下是我们对 A/V 的了解:

  • 它们通常出现在相同的地址:0x50059f27。有时它们发生在 0x5005eb86,通常是在另一个地址触发了 A/V 之后。
  • 它们发生在应用程序中的各种不同位置和操作中。
  • 它们不是 100% 可重复的。有时,项目的重建会消除一个触发因素,但随后其他因素会触发它。它们似乎在构建中保持相当一致的可重现性。
  • 它们通常与打开对话框或激活返回大量记录(1,000+)的查询有关。
  • D2006 版本(我们在 XP 机器或 XP 虚拟机上运行)不会发生这种情况。 - 当我们在 XP-SP3 兼容模式下运行 XE5 应用程序时,它们不会发生。
  • 如果我们在典型的 A/V 之后中断,则指针将在 System.pas 中的第 562 行,在下面的代码部分的{$IFDEF CPUX86}asm 部分procedure Move(const Source; var Dest; Count: NativeInt);中。线路是FILD QWORD PTR [EAX] {Last 8}

我们猜测这个问题与我们的应用程序如何处理 Windows 7 内存管理有关,但我们不知道如何找出哪里出错了。附加了一个示例调用堆栈。

任何人都可以建议我们如何继续解决此问题?是否有第三方调试工具可以提供帮助?我们是否可以使用 Delphi IDE …

delphi access-violation windows-7 delphi-xe5

2
推荐指数
1
解决办法
453
查看次数

发布后Delphi XE10.2表单不为零

我在Delphi中使用多年的技术已不再适用,因为我创建的表单在发布后不会设置为nil.这是一些示例代码:

type 
  TAboutForm = class(TForm);
  end;

function ShowAboutForm: TModalResult;
function ShowAboutForm2: TModalResult;

implementation

var
  FAboutForm: TAboutForm;

{$R *.dfm}

function AboutForm: TAboutForm;
begin
  if not Assigned(FAboutForm) then
    FAboutForm := TAboutForm.Create(Application);
  Result := FAboutForm;
end;

function ShowAboutForm: TModalResult;
begin
  with AboutForm do
    try
      Result := ShowModal;
    finally
      Release;
    end;
end;

function ShowAboutForm2: TModalResult;
var
  AAboutForm: TAboutForm;
begin
  AAboutForm := AboutForm;
    try
      Result := AAboutForm.ShowModal;
    finally
      AAboutForm.Release;
      AABoutForm := nil;
    end;
end;
Run Code Online (Sandbox Code Playgroud)

ShowAboutForm和ShowAboutForm2都没有第二次工作.两者都抛出访问冲突,因为任何一种方法都没有将FAboutForm设置为nil - 即使ShowAboutForm2显式地将局部变量设置为nil - 因此它不会在AboutForm中重新创建.我发现让代码工作的唯一方法是:

function ShowAboutForm3: TModalResult;
begin
  fAboutForm := …
Run Code Online (Sandbox Code Playgroud)

forms delphi

-1
推荐指数
1
解决办法
194
查看次数

标签 统计

delphi ×2

access-violation ×1

delphi-xe5 ×1

forms ×1

windows-7 ×1