システムwiki

vbscript.dllクラス_terminateバグkb4524570(2019年11月12日) Windows 10 1903

Anonymo 受付中 最終更新日:2021-04-28 23:34

HI、

vbscript.dll sincecumulative 4524570にバグがあるようです.クラスメンバ関数内にクラスのインスタンスを作成し、それをローカル変数に割り当てると、このメンバー関数が同じときにインスタンスは直接破棄されませんそうだった
このアップデートの前に.次のコード例:

を参照してください.

オプション明示

クラスCTEST

サブクラス_initialize

wscript.echo timer&":ctest :: class_initialize()"

終了SUB

サブクラス

wscript.echo timer&":ctest :: class_terminate()"

終了SUB

エンドクラス

クラスCFOO

サブ作業

wscript.echo timer&":cfoo :: work()が開始されました"

Dowork

wscript.sleep 3000

wscript.echo timer&":cfoo :: work()完了"

終了SUB

サブダウルク

wscript.echo timer&":cfoo :: dowork()が開始されました"

DIM obj

セットobj= new ctest

wscript.echo timer&":cfoo :: dowork()完了、ctest :: class_terminate()は遅滞なく呼び出されるべきです"

終了SUB

エンドクラス

DIM objfoo

セットobjfoo= new cfoo

objfoo.work

wscript.echo timer&":objfoo.work()完了"

CScript.exeを使用して実行すると、次の出力が生成されます.

80547,52:CFOO :: work()が開始されました

80547,52:CFOO :: Dowork()が開始

80547,52:CTEST :: CLASS_INITIALIZE()

80547,52:CFOO :: Dowork()完了、CTEST :: Class_Terminate()は遅滞なく呼び出す必要があります

80550,52:CFOO :: work()完了

80550,52:CTEST :: CLASS_TERMINATE()

80550,53:objfoo.work()完了

前のversionのvbscript.dllを使用して実行すると、出力は次のように正しく対応します.

79971,76:CFOO :: work()
79971,76:CFOO :: Dowork()が開始されました
79971,76:CTest :: class_initialize()
79971,76:CFO: :dowork()完了、CTest :: class_terminate()は遅滞なく呼び出されるべきです
79971,76:CTest :: class_terminate()79974,76:CFOO :: work( )完了
79974,76:objfoo.work()完了

範囲が残っているときにローカル変数によって参照されるオブジェクトが破壊されるという事実に頼るあらゆる種類のコードで問題が発生すると思います.

KB4524535以降のwindows 7に同じバグがあります(2019年11月12日(月刊ロールアップ)).

この行動の変化の理由はありますか?私はすぐにバグ修正があることを願っています...

返信リスト(回答:1)

1 #
LievenK

スタックオーバーフロー

メモリ不足の問題について別のKBを特定しましたが、根本的には同じ問題のように見えます.