別の手段に記憶されたデータにアクセスするデルファイ
-
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;
私は、宣言したデータ:VarのTDATA
私はUnit1はでしかし次の操作を実行してみてください。
ShowMessage(FloatToStr(Unit2.Data.Inflation.SavedValue));
私はEAccessViolationメッセージが表示されます。エラーを取得せずにUnit1はから「データ」に格納されたデータにアクセスする方法はありますか?
解決
Unit2ののData := TData.Create;
セクションにinitialization
を追加、または代わりに、オブジェクトのレコードにTDATAを変更します。長い彼らが適切に初期化しているとしてとしてUnit1はからUnit2ののグローバルオブジェクトにアクセスすると、本質的には何も問題はありません。
他のヒント
@ Hendriksen123、あなたはそれを使用する前に、変数Data
を初期化しますか? EAccessViolation
は、不正なメモリアクセスエラーの例外クラスであり、通常はあなたのコードが作成された(初期化)や、既に破壊されていなかったオブジェクトにアクセスしようとしたときに発生します。
Data := TData.Create;
を使用してみてください。
と、あなたはData
のVARを使用することができます。
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