相关疑难解决方法(0)

Delphi单元初始化并不总是被调用

我在.bpl中有一个单元,我需要一个我写的新函数的字符串列表.我希望stringlist在应用程序的生命周期内保持不变,这样每个调用都可以建立在之前调用的内容之上.

所以它在单元内全局声明,我在Initialization部分初始化它,如下所示:

var
  ProductLookup : TStrings;  
...

function foo : boolean;
begin
  result := (ProductLookup.IndexOfName('bar') >=0); //blow up here. It's nil. Why?
end;
....

initialization
  ProductLookup := TStringList.Create;  // This should get run, but doesn't.

finalization
  FreeAndNil(ProductLookup);

end.
Run Code Online (Sandbox Code Playgroud)

当我对它进行单元测试时,一切都很好.但是当它从主应用程序运行时,由于字符串列表为零而导致访问冲突.所以现在我在foo函数中检查nil并在必要时创建.但我不知道为什么初始化对我不起作用.我在初始化中放了一个调试消息,当它作为BPL加载时它不会运行,但如果我直接编译到我的dUnit exe中,它会运行.有任何想法吗?Delphi2005.

delphi initialization delphi-2005

9
推荐指数
1
解决办法
7762
查看次数

Delphi并在一个单元中完成

我有两个单位unitA和unitB.类TFoo在unitB中声明.

在单元A的最终确定中调用B.Free是否总是安全的?

它如何依赖于unitA和unitB在dpr中的顺序?

执行unitA终结时,我能确定unitB是否存在?

unit unitB;
interface
type
 TFoo = class
   // code...
  end;
 // code....
end;

unit unitA;
// code..
implementation
uses
 unitB;
var
 A: TStringList;
 B: UnitB.TFoo;

initialization
 A:= TStringList.Create;
 B:= UnitB.TFoo.Create;
finalization
 A.Free;
 B.Free;  // Is it safe to call?
end.
Run Code Online (Sandbox Code Playgroud)

delphi finalization

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

为什么在C++中没有"初始化"关键字,就像在Delphi中一样?

在切换到C++之前,我们发现initializationDelphi中的语言元素非常有用.它允许您在程序启动时调用每个单元中的代码,因此您可以初始化该单元的各种元素.

我们认为这可以使事情变得更容易并有助于保持代码清洁.

  • 那么为什么没有initializationfinalizationC++中?

  • 在C++中替换这种语言功能有哪些选择?

c++ delphi initialization

3
推荐指数
1
解决办法
1576
查看次数

标签 统计

delphi ×3

initialization ×2

c++ ×1

delphi-2005 ×1

finalization ×1