访问存储在另一单元中的数据的Delphi
-
26-09-2019 - |
题
在UNIT2我的节目的我有以下代码:
TValue = Record
NewValue,
OldValue,
SavedValue : Double;
end;
TData = Class(TObject)
Public
EconomicGrowth : TValue;
Inflation : TValue;
Unemployment : TValue;
CurrentAccountPosition : TValue;
AggregateSupply : TValue;
AggregateDemand : TValue;
ADGovernmentSpending : TValue;
ADConsumption : TValue;
ADInvestment : TValue;
ADNetExports : TValue;
OverallTaxation : TValue;
GovernmentSpending : TValue;
InterestRates : TValue;
IncomeTax : TValue;
Benefits : TValue;
TrainingEducationSpending : TValue;
End;
我然后声明数据:TDATA在无功
当我尝试做然而,在1单元执行以下操作:
ShowMessage(FloatToStr(Unit2.Data.Inflation.SavedValue));
我得到一个EAccessViolation消息。有没有什么办法来访问存储在从1单元“数据”的数据没有得到错误?
解决方案
...添加到Data := TData.Create;
UNIT2的initialization
部分,或改变TDATA到记录,而不是一个对象。没有什么内在的错误访问UNIT2的从1单元全局对象,只要他们正确初始化。
其他提示
@ Hendriksen123,你初始化变量Data
使用它之前?该EAccessViolation
是无效的内存访问错误的异常类,通常当你的代码试图访问未创建(初始化)或者已经被销毁的对象出现。
尝试使用Data := TData.Create;
和然后可以使用Data
变种
unit Unit2;
interface
type
TValue = Record
NewValue,
OldValue,
SavedValue : Double;
end;
TData = Class(TObject)
Public
EconomicGrowth : TValue;
Inflation : TValue;
Unemployment : TValue;
CurrentAccountPosition : TValue;
AggregateSupply : TValue;
AggregateDemand : TValue;
ADGovernmentSpending : TValue;
ADConsumption : TValue;
ADInvestment : TValue;
ADNetExports : TValue;
OverallTaxation : TValue;
GovernmentSpending : TValue;
InterestRates : TValue;
IncomeTax : TValue;
Benefits : TValue;
TrainingEducationSpending : TValue;
End;
procedure InitialiseData (var pData : TData);
implementation
procedure InitialiseData (var pData : TData);
begin
pData := TData.Create;
pData.EconomicGrowth.SavedValue := 1.00;
end;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Unit2,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
vData : TData;
begin
Unit2.InitialiseData(vData);
ShowMessage(FloatToStr(vData.EconomicGrowth.SavedValue));
end;
end.
这作品
不隶属于 StackOverflow