UWSC ver5.0.0 の VAR_ASTR/VAR_USTR

UWSC Ver5.0.0からVAR_BSTRが廃止となり、VAR_ASTRとVAR_USTRができた。
そして、ENCODEにCODE_ANSIが追加となった。


この関係を探った結果。

  • 基本は、VAR_USTR
  • ENCODE CODE_ANSIで、VAR_ASTRになる(VARTYPEでも変換化)
  • VAR_ASTRをVAR_USTRに戻すには、EMPTYか""を足すかVARTYPEで変換

イマイチ存在意義がない気がする、、、。(LENGTHやASCでも差は見られない)



確認スクリプト

msg = "あいう"
print vartype(msg)      // 258:VAR_USTR
msga = ENCODE(msg, CODE_ANSI)
print vartype(msga)     // 256:VAR_ASTR
msga = vartype(msg, VAR_ASTR)
print vartype(msga)     // 256:VAR_ASTR
msgu = msga + EMPTY
print vartype(msgu)     // 258:VAR_USTR
msgu = vartype(msga, VAR_USTR)
print vartype(msgu)     // 258:VAR_USTR

print length(msga) + " " + length(msgu) + " " + lengthb(msga) + " " + lengthb(msgu)
print asc(msga) + " " + asc(msgu) + " " + ascb(msga) + " " + ascb(msgu)

内部的には意味があるんでしょうけど。
あとは、前から作っているDLLモジュールみたいに、RtlMoveMemoryを使うケースで使うくらいかな。

互換性問題

ver5.0.0より前のスクリプトの修正方針

  • VAR_BSTRの一致確認は、VAR_USTR。一致確認以外は適宜修正
  • MSGBOX/INPUT/SLCTBOXのクラス名変更
  • UWSC.INI/UWSC.LOGの直接参照している乱暴者は、パス修正
  • SETSLIDERのGET_SLIDERは、、、未検討
  • CREATEFORMのFOM_NOLUNAは、XPは知らん
  • ログのフォントを変えたい場合は、UWSC.INIの直接修正という狼藉のみか?


ver5.0.0はまだまだ使いたくない、という場合は以下のモジュールが助けになるかも。

MODULE V5
        PUBLIC VAR_STR = 258
        PUBLIC MSGBOX_CLASS = "TUmsgDlg_uwsc"
        PUBLIC INPUT_CLASS = "TUinpBox_uwsc"
        PUBLIC SLCTBOX_CLASS = "TUslctBox_uwsc"

        PROCEDURE V5()
                IFB GET_UWSC_VER < 5 THEN
                        VAR_STR = 8
                        MSGBOX_CLASS = "TFmsgDlg.UnicodeClass"
                        INPUT_CLASS = "TFInpBox.UnicodeClass"
                        SLCTBOX_CLASS = "TFSectBox.UnicodeClass"
                ENDIF
        FEND
ENDMODULE

他のモジュールから参照する際、V5のコンストラクタが遅い場合は、他のモジュールの先頭で呼んでしまってください。
何回実行されても特に問題はないので。