UWSC ReadIni 2047の壁
追記 20120605
uwsc4.8にて、修正されたため本記事はもはやゴミです(^^;;;
UWSCのReadIniには、2047文字の壁がある模様。
公式掲示板にて、書けるけど読めない、という記述を見た。
ので、回避策を考えてみた。
けど、結局のところ、Win32APIの32KBの壁が越えられません。
(WritePrivateProfileStringでは64KBでもかけるのに)
ということで、どれほどの意味があるかは不明、、、。
ini.uws
OPTION EXPLICIT IFB GET_UWSC_NAME = "ini.uws" THEN Const SEC = "試験" Dim i = 1024, strdata = FORMAT("*", i) While i <= 4096 DeleteIni(SEC, i) WriteIni(SEC, i, strdata) Print "ReadIni " + i + " = " + Length(ReadIni(SEC, i)) Print "Ini.Read " + i + " = " + Length(Ini.Read(SEC, i)) i = i * 2 strdata = strdata + strdata Wend ENDIF MODULE Ini DEF_DLL GetPrivateProfileStringA(string, string, string, var string, dword, string): dword: kernel32 DIM _defIniPath CONST _defBufSize = 1024 PROCEDURE Ini _defIniPath = ".\" + COPY(GET_UWSC_NAME, 1, LENGTH(GET_UWSC_NAME) - 3) + "ini" FEND FUNCTION Read(sec, key, path="") IF LENGTH(path) = 0 THEN path = _defIniPath DIM size = _defBufSize, buf = FORMAT(CHRB(0), size), ret = -1 WHILE ret = -1 ret = GetPrivateProfileStringA(sec, key, "", buf, size, path) IFB ret >= size - 2 THEN size = size * 2 buf = FORMAT(CHRB(0), size) ret = -1 ENDIF WEND RESULT = TRIM(buf) FEND PROCEDURE Write(sec, key, val, path="") WriteIni(sec, key, val, path) FEND PROCEDURE Delete(sec, key, path="") DeleteIni(sec, key, path) FEND ENDMODULE
なんとなく、GetPrivateProfileStringはAを使ってみた。
しかし、32KBの壁に関する記載は、ないんだけど、、、。
もっとも、GetPrivateProfileStringは互換性のために残してあるだけなので、知らん、とかマイクロソフトに言われそうな気がする、、、。