致命的なエラーになるケースについて(VW)

スクリプトは作成する過程で、苦労したエラーについていくつか記しておきます。
結構多かったのが空ハンドルの処理に関するもので、ハンドルタイプの変数はこのスクリプト特有のものです。
コンパイルが通っても変数に不正な値が入ってきてエラーになることはよくありますが、ハンドルタイプではこれを見落としがちでした。
空ハンドルが入ってしまった場合の処理は、正常に処理してしまう場合もあれば、明確に警告やエラーが出る場合、3Dオブジェクト判定(651)のように突然ハングアップする場合もあります。
なかでもハングアップしてしまうケースでは、VectorScriptデバッガによる追跡調査でどの時点で発生するのかを見つけださなければなりません。

その他でハングアップを招くケースとしては、ダイアログのitemIDが被っていたというのがありました。
大体出来上がっているダイアログに、後から機能を追加すると起こることがあります。
コンパイルの時点でエラーが出ることもあるのですが、通ってしまって見落とすこともありました。

これも空ハンドル絡みですが、DelObjectを使ったとき異常が起こることがあります。
このとき、ハンドルがNILになるにもかかわらず、それまで存在したハンドルを変数が保持し続けるのが原因でした。
この後の処理によっては、おそらくメモリが解放されないためVectorWorks自体を終了させることができなくなります。
DelObject使用後、ハンドル変数に明確にNILを代入することで発生しなくなりました。
その後の処理にかかわらず、常にそうするようにしておいた方が不意な問題発生を防げると思います。
このエラーについては、VectorScriptサンプルで公開されている「rot3Dダイアログ」でも起きることを確認しました。

面倒なケースとしては、「単位の設定」で「単位表示」に設定して作図しているときの対応です。
おそらく、いろいろ面倒があるのでそういう人はまずいないとは思いましたが、この時にNum2StrFを使って実数を文字列に変換すると最後に単位が付けられます。
これを再び実数に変換すると、当然問題になるケースが出てきて、最悪の場合ハングアップします。
既製単位を使用している場合、単位付でも変換してしまうようですが、カスタム単位ではエラーとなります。
これは、Num2Strでは起こりませんが、こちらは指定した小数点の桁数分だけ0が付いてくる(有効桁分0を表示している状態)ので扱いが面倒になります。(必要な処理については、補助単位の位取りで見ることができます)
整数ではこれでいいのですが、実数はNum2StrFで変換した方が扱いが楽です。
そこで取ったのが、スクリプト実行前に「単位表示」が表示されていれば解除して、実行後に元に戻すと手法です。

その他、いくつか不明なことがあります。
1.HasDimでTRUEが返る条件?
2.ビューポート注釈に必ずあるtype=76は何か?(未編集では存在しない)
3.T=SPRDSHEETでワークシートを検索できない?
4.リストブラウザで、EnableLBDragAndDrop、SetLBDragDropColumnを使ってもドラッグ&ドロップができない?
5.リストブラウザのInsertLBColumnDataItemのitemDataの利用方法?
6.補助単位のUnit Fraction(200)の値は異常ではないのか?
7.SetWorkingPlaneによる回転動作は不正?
何か情報があるようでしたら、教えていただけると幸いです。