Delphi 访问存储在另一个单元中的数据
在我的程序单元2中,我有以下代码:Delphi 访问存储在另一个单元中的数据,delphi,class,data-structures,variables,delphi-units,Delphi,Class,Data Structures,Variables,Delphi Units,在我的程序单元2中,我有以下代码: TValue = Record NewValue, OldValue, SavedValue : Double; end; TData = Class(TObject) Public EconomicGrowth : TValue; Inflation : TValue; Unemployment : TValue; CurrentAccountPosition : TValue; AggregateSupply : TVa
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;
然后在Var中声明Data:TData
但是,当我尝试在单元1中执行以下操作时:
ShowMessage(FloatToStr(Unit2.Data.Inflation.SavedValue));
我收到一条消息。有没有办法从Unit1访问“data”中存储的数据而不出错?添加
数据:=TData.Create
到Unit2的初始化
部分,或者将TData更改为记录而不是对象。只要正确初始化,从Unit1访问Unit2的全局对象本质上没有什么问题。AddData:=TData.Create
到Unit2的初始化
部分,或者将TData更改为记录而不是对象。只要正确初始化,从Unit1访问Unit2的全局对象本质上没有什么问题。@Hendriksen123,在使用变量数据之前是否初始化它?EAccessViolation
是无效内存访问错误的例外类,通常在代码尝试访问尚未创建(初始化)或已销毁的对象时发生
尝试使用Data:=TData.Create代码>
然后您可以使用数据
变量。@Hendriksen123,在使用变量之前是否初始化变量数据
?EAccessViolation
是无效内存访问错误的例外类,通常在代码尝试访问尚未创建(初始化)或已销毁的对象时发生
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.
尝试使用Data:=TData.Create代码>
然后您可以使用数据变量
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.
行得通
作品
如果这不仅仅是为了示例的目的,您可能需要考虑一个不同的名称,因为TValue是用于扩展RTTI的Delphi 2010中使用的实际数据类型。如果这不仅仅是为了示例的目的,您可能需要考虑一个不同的名称,因为TValue是Delphi2010中用于扩展RTTI的实际数据类型。我将其更改为记录而不是对象,这似乎解决了问题,谢谢@亨德里克森-你的对象方法会起作用的,照克雷格说的做!不要将其设置为记录,只需正确创建对象。如果在初始化中创建,请不要忘记在终结时释放。我将其更改为记录而不是对象,这似乎解决了问题,谢谢@亨德里克森-你的对象方法会起作用的,照克雷格说的做!不要将其作为记录,只需正确创建对象。如果您在初始化中创建,不要忘记在终结时释放。如果您在后期缩进中包含代码,则将其全部缩进4个空格,并将保留格式并添加语法突出显示。只是出于好奇,如果使用此代码,TData对象应该在哪里释放——Unit1或Unit2的代码?它应该在创建它的地方释放。谢谢,Mason。。。告诉我我是否正确:对于Unit1,要释放TData对象,在不同于Button1Click的过程中,vData必须在类级别这样的地方声明,对吗?如果Unit2的InitializeData方法没有将TData参数声明为var,会发生什么?如果在后缩进中包含代码,则将其全部缩进4个空格,并保留格式并添加语法高亮显示。出于好奇,如果使用此代码,TData对象应该在哪里释放——Unit1或Unit2的代码?它应该在创建它的地方释放。谢谢,Mason。。。告诉我我是否正确:对于Unit1,要释放TData对象,在不同于Button1Click的过程中,vData必须在类级别这样的地方声明,对吗?如果Unit2的InitializeData方法没有将TData参数声明为var,会发生什么?