0

次のような手順があります

Procedure TestProc(TVar1, TVar2 : variant);
Begin
  TVar1 := CreateOleObject('Excel.Application');
  TVar1.Workbooks.open('C:\Test\Test.xls');
  TVar1.Workbooks[1].Worksheets[1].Name := 'Sheet_1';
  TVar2 := TVar1.Workbooks[1].Worksheets['Sheet_1'];
End;

注: TVar1 と TVar2 はグローバル変数です。

ボタンの onclick イベントでプロシージャを呼び出してから、作成されたオブジェクトを使用しても機能しません

Delphi では、バリアント パラメーターを持つプロシージャの作成が許可されていないということですか?

4

1 に答える 1

8

提示するコードサンプルでは、​​グローバル変数ではなく、ローカルTVar1パラメーターTVar2ですこれらはparamsとしてマークされていないvarため、関数呼び出しに渡されたパラメーター値のコピーを受け取り、これらのローカル変数に加えられた変更は呼び出し元に戻されません。TVar1他の場所で名前が付けられて宣言されたグローバル変数もあるかどうかは関係ありませんTVar2。この手順では、ローカルパラメータが優先されます。

変更を呼び出し元に戻す場合は、パラメーターをパラメーターとして宣言しvarます。

Procedure TestProc(var TVar1, TVar2 : variant);
于 2012-07-02T16:28:56.627 に答える