vbscript.dllクラス_terminateバグkb4524570(2019年11月12日) Windows 10 1903
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)
メモリ不足の問題について別のKBを特定しましたが、根本的には同じ問題のように見えます.