hiiw

uwsc log test

May 28th, 2021 (edited)
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.61 KB | None | 0 0
  1. /// test.uws ///====================================
  2.  
  3. call win32_error.uws
  4. call win32_file.uws
  5.  
  6. PUBLIC pub_scriptname_without_ext = COPY( GET_UWSC_NAME, 1, LENGTH(GET_UWSC_NAME)-LENGTH(".uws")) // スクリプト名(パス無し)から拡張子を除いたもの
  7.  
  8. DIM sTest = "0123456789abcdefghij0123456789abcdefghij0123456789"
  9.  
  10. DIM i
  11. DIM start1, end1
  12. DIM start2, end2
  13. start1 = GETTIME()
  14. FOR i=1 TO 500
  15. AddToLog0(sTest)
  16. NEXT
  17. end1 = GETTIME()
  18. start2 = GETTIME()
  19. FOR i=1 TO 500
  20. AddToLog(sTest)
  21. NEXT
  22. end2 = GETTIME()
  23. MSGBOX("UWSC "+ (end1-start1) + "秒")
  24. MSGBOX("WinAPI "+ (end2-start2) + "秒")
  25.  
  26. // end
  27.  
  28. FUNCTION AddLineToClosingFile(path, name, ext, data)
  29. RESULT = FALSE
  30.  
  31. DIM sLogNameExt = name+"."+ext
  32.  
  33. DIM hFile, nError
  34. DIM cnt = 0
  35. REPEAT
  36. hFile = CreateFileA( path+"\"+ sLogNameExt, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
  37. IFB INVALID_HANDLE_VALUE = hFile THEN
  38. nError = GetLastError()
  39. IFB 5 = nError OR 32 = nError THEN
  40. // 5 アクセス拒否
  41. // 32 他のプロセスがオープン
  42. cnt = cnt+1
  43. sLogNameExt = name+"."+cnt+ "."+ext
  44. ELSE
  45. MSGBOX("CreateFile() - " +" (Error:"+nError+")<#CR>"+ GetErrorMessage(nError))
  46. BREAK
  47. ENDIF
  48. ELSE
  49. // open success
  50. BREAK
  51. ENDIF
  52. IFB 9<cnt THEN
  53. EXIT
  54. ENDIF
  55. UNTIL INVALID_HANDLE_VALUE <> hFile
  56.  
  57. DIM nFilePoint
  58.  
  59. nFilePoint = SetFilePointer(hFile, 0, 0, FILE_END)
  60. MessageIfErrorOccurred("SetFilePointer() - ", INVALID_SET_FILE_POINTER=nFilePoint)
  61.  
  62. DIM nResult
  63. DIM bSuccess = WriteFileStr(hFile, data+ "<#CR>", LENGTHB(data+ "<#CR>"), nResult)
  64. MessageIfErrorOccurred("WriteFileStr() - ", FALSE=bSuccess)
  65.  
  66. bSuccess = CloseHandle(hFile);
  67. MessageIfErrorOccurred("CloseHandle() - ", FALSE=bSuccess)
  68.  
  69. RESULT = TRUE
  70. FEND
  71.  
  72. FUNCTION AddToLog(sData)
  73.  
  74. RESULT = 0
  75.  
  76. GETTIME( )
  77. DIM sLogLine = DateTimeFormat1( G_TIME_YY _ // 年
  78. ,G_TIME_MM _ // 月
  79. ,G_TIME_DD _ // 日
  80. ,G_TIME_HH _ // 時
  81. ,G_TIME_NN _ // 分
  82. ,G_TIME_SS ) _ // 秒
  83. +", "+sData
  84.  
  85. RESULT = AddLineToClosingFile(GET_CUR_DIR, pub_scriptname_without_ext, "txt", sLogLine)
  86.  
  87. FEND
  88.  
  89. FUNCTION DateTimeFormat1(y, m, d, h, n, s)
  90. DEF_DLL wsprintfA(var STRING,STRING,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD):int:user32.dll
  91. DIM f = " "
  92. wsprintfA(f,"%04d/%02d/%02d %02d:%02d:%02d", y, m, d, h, n, s)
  93. RESULT=f
  94. FEND
  95. ///====================================
  96.  
  97.  
  98. /// LogTool0.uws ///====================================
  99.  
  100. FUNCTION AddLineToClosingFile0(path, name, ext, data)
  101. RESULT = FALSE
  102.  
  103. DIM sLogNameExt = name+"."+ext
  104.  
  105. DIM idFile
  106. DIM cnt = 0
  107. WHILE 1
  108. idFile = FOPEN( path+"\"+ sLogNameExt, F_READ or F_WRITE )
  109. IFB -1 = idFile THEN
  110. cnt = cnt+1
  111. sLogNameExt = name+"."+cnt+ "."+ext
  112. ELSE
  113. // open success
  114. BREAK
  115. ENDIF
  116. IFB 9<cnt THEN
  117. EXIT
  118. ENDIF
  119. WEND
  120.  
  121. FPUT(idFile, data)
  122.  
  123. FCLOSE( idFile )
  124.  
  125. RESULT = TRUE
  126. FEND
  127.  
  128. FUNCTION AddToLog0(sData)
  129.  
  130. RESULT = 0
  131.  
  132. DIM path = GET_CUR_DIR
  133. DIM name = pub_scriptname_without_ext + "0"
  134. DIM ext = "txt"
  135.  
  136. GETTIME( )
  137. DIM sLogLine = "" + ZeroFilltoDigit(G_TIME_YY, 4) _ // 年
  138. +"/" + ZeroFilltoDigit(G_TIME_MM, 2) _ // 月
  139. +"/" + ZeroFilltoDigit(G_TIME_DD, 2) _ // 日
  140. +" " + ZeroFilltoDigit(G_TIME_HH, 2) _ // 時
  141. +":" + ZeroFilltoDigit(G_TIME_NN, 2) _ // 分
  142. +":" + ZeroFilltoDigit(G_TIME_SS, 2) _ // 秒
  143. +", "+sData
  144.  
  145. RESULT = AddLineToClosingFile0(path, name, ext, sLogLine)
  146.  
  147. FEND
  148.  
  149.  
  150. FUNCTION ZeroFilltoDigit(n, digit)
  151. RESULT = REPLACE(FORMAT(n, digit)," ", "0")
  152. FEND
  153. ///====================================
  154.  
  155.  
  156. /// Win32api_Kernel32.uws ///====================================
  157.  
  158. PUBLIC HANDLE_IS_LONG=0
  159. // 0 でHANDLE は DWORD
  160. // 1 でHANDLE は LONG
  161. // 本来HANDLE は LONG_PTR
  162.  
  163. //DWORD GetLastError(VOID);
  164. //Kernel32.lib
  165. DEF_DLL GetLastError( ):DWORD:Kernel32.dll
  166.  
  167. //BOOL CloseHandle(
  168. // HANDLE hObject // オブジェクトのハンドル
  169. //);
  170. //Kernel32.lib
  171. // CloseHandle()はファイル専用の関数ではないことに注意
  172. IFB 0=HANDLE_IS_LONG THEN
  173. DEF_DLL CloseHandle(DWORD):BOOL:Kernel32.dll
  174. ELSE
  175. DEF_DLL CloseHandle(LONG):BOOL:Kernel32.dll
  176. ENDIF
  177.  
  178.  
  179. //HANDLE CreateFile(
  180. // LPCTSTR lpFileName, // ファイル名
  181. // DWORD dwDesiredAccess, // アクセスモード
  182. // DWORD dwShareMode, // 共有モード
  183. // LPSECURITY_ATTRIBUTES lpSecurityAttributes, // セキュリティ記述子
  184. // DWORD dwCreationDisposition, // 作成方法
  185. // DWORD dwFlagsAndAttributes, // ファイル属性
  186. // HANDLE hTemplateFile // テンプレートファイルのハンドル
  187. //);
  188. //Kernel32.lib
  189. //#define GENERIC_READ (0x80000000L)
  190. //#define GENERIC_WRITE (0x40000000L)
  191. //#define FILE_SHARE_READ (0x00000001) /* from WINNT.H */
  192. //#define FILE_SHARE_WRITE (0x00000002) /* from WINNT.H */
  193. //#define CREATE_NEW 1
  194. //#define CREATE_ALWAYS 2
  195. //#define OPEN_EXISTING 3
  196. //#define OPEN_ALWAYS 4
  197. //#define TRUNCATE_EXISTING 5
  198.  
  199. //#define FILE_ATTRIBUTE_READONLY 0x00000001
  200. //#define FILE_ATTRIBUTE_HIDDEN 0x00000002
  201. //#define FILE_ATTRIBUTE_SYSTEM 0x00000004
  202. //#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
  203. //#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
  204. //#define FILE_ATTRIBUTE_DEVICE 0x00000040
  205. //#define FILE_ATTRIBUTE_NORMAL 0x00000080
  206. //#define FILE_ATTRIBUTE_TEMPORARY 0x00000100
  207. //#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
  208. //#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
  209. //#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
  210. //#define FILE_ATTRIBUTE_OFFLINE 0x00001000
  211. //#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
  212. //#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
  213. //#define FILE_ATTRIBUTE_VIRTUAL 0x00010000
  214.  
  215. //
  216. // File creation flags must start at the high end since they
  217. // are combined with the attributes
  218. //
  219. //#define FILE_FLAG_WRITE_THROUGH 0x80000000
  220. //#define FILE_FLAG_OVERLAPPED 0x40000000
  221. //#define FILE_FLAG_NO_BUFFERING 0x20000000
  222. //#define FILE_FLAG_RANDOM_ACCESS 0x10000000
  223. //#define FILE_FLAG_SEQUENTIAL_SCAN 0x08000000
  224. //#define FILE_FLAG_DELETE_ON_CLOSE 0x04000000
  225. //#define FILE_FLAG_BACKUP_SEMANTICS 0x02000000
  226. //#define FILE_FLAG_POSIX_SEMANTICS 0x01000000
  227. //#define FILE_FLAG_OPEN_REPARSE_POINT 0x00200000
  228. //#define FILE_FLAG_OPEN_NO_RECALL 0x00100000
  229. //#define FILE_FLAG_FIRST_PIPE_INSTANCE 0x00080000
  230.  
  231.  
  232. PUBLIC INVALID_HANDLE_VALUE
  233. IFB 0=HANDLE_IS_LONG THEN
  234. DEF_DLL CreateFileA(STRING, DWORD, DWORD, DWORD, DWORD, DWORD, LONG):DWORD:Kernel32.dll
  235. DEF_DLL CreateFileW(Wstring, DWORD, DWORD, DWORD, DWORD, DWORD, LONG):DWORD:Kernel32.dll
  236. //エラー時戻り値 = 4294967295($FFFFFFFF)
  237. INVALID_HANDLE_VALUE = $FFFFFFFF
  238. // SDK では
  239. // #define INVALID_HANDLE_VALUE ((HANDLE)((LONG_PTR)-1))
  240. ELSE
  241. DEF_DLL CreateFileA(STRING, DWORD, DWORD, DWORD, DWORD, DWORD, LONG):LONG:Kernel32.dll
  242. DEF_DLL CreateFileW(Wstring, DWORD, DWORD, DWORD, DWORD, DWORD, LONG):LONG:Kernel32.dll
  243. //エラー時戻り値 = -1($FFFFFFFFFFFFFFFF)
  244. INVALID_HANDLE_VALUE = -1
  245. // SDK では
  246. // #define INVALID_HANDLE_VALUE ((HANDLE)((LONG_PTR)-1))
  247. ENDIF
  248.  
  249. // for CreateFile()
  250. CONST GENERIC_READ = $80000000
  251. CONST GENERIC_WRITE = $40000000
  252. CONST FILE_SHARE_READ = $00000001
  253. CONST FILE_SHARE_WRITE = $00000002
  254. CONST CREATE_NEW = 1
  255. CONST CREATE_ALWAYS = 2
  256. CONST OPEN_EXISTING = 3
  257. CONST OPEN_ALWAYS = 4
  258. CONST TRUNCATE_EXISTING = 5
  259.  
  260. CONST FILE_ATTRIBUTE_READONLY = $00000001
  261. CONST FILE_ATTRIBUTE_HIDDEN = $00000002
  262. CONST FILE_ATTRIBUTE_SYSTEM = $00000004
  263. CONST FILE_ATTRIBUTE_DIRECTORY = $00000010
  264. CONST FILE_ATTRIBUTE_ARCHIVE = $00000020
  265. CONST FILE_ATTRIBUTE_DEVICE = $00000040
  266. CONST FILE_ATTRIBUTE_NORMAL = $00000080
  267. CONST FILE_ATTRIBUTE_TEMPORARY = $00000100
  268. CONST FILE_ATTRIBUTE_SPARSE_FILE = $00000200
  269. CONST FILE_ATTRIBUTE_REPARSE_POINT = $00000400
  270. CONST FILE_ATTRIBUTE_COMPRESSED = $00000800
  271. CONST FILE_ATTRIBUTE_OFFLINE = $00001000
  272. CONST FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = $00002000
  273. CONST FILE_ATTRIBUTE_ENCRYPTED = $00004000
  274. CONST FILE_ATTRIBUTE_VIRTUAL = $00010000
  275.  
  276. CONST FILE_FLAG_WRITE_THROUGH = $80000000
  277. CONST FILE_FLAG_OVERLAPPED = $40000000
  278. CONST FILE_FLAG_NO_BUFFERING = $20000000
  279. CONST FILE_FLAG_RANDOM_ACCESS = $10000000
  280. CONST FILE_FLAG_SEQUENTIAL_SCAN = $08000000
  281. CONST FILE_FLAG_DELETE_ON_CLOSE = $04000000
  282. CONST FILE_FLAG_BACKUP_SEMANTICS = $02000000
  283. CONST FILE_FLAG_POSIX_SEMANTICS = $01000000
  284. CONST FILE_FLAG_OPEN_REPARSE_POINT = $00200000
  285. CONST FILE_FLAG_OPEN_NO_RECALL = $00100000
  286. CONST FILE_FLAG_FIRST_PIPE_INSTANCE = $00080000
  287.  
  288. DEF_DLL WriteFile(DWORD, var DWORD, DWORD,var DWORD,DWORD):BOOL:Kernel32.dll
  289. DEF_DLL ReadFile(DWORD, var DWORD, DWORD,var DWORD,DWORD):BOOL:Kernel32.dll
  290.  
  291. DEF_DLL DeleteFileA(STRING):BOOL:Kernel32.dll
  292. DEF_DLL DeleteFileW(WSTRING):BOOL:Kernel32.dll
  293.  
  294. DEF_DLL CreateDirectoryA(STRING,DWORD):BOOL:Kernel32.dll
  295. DEF_DLL CreateDirectoryW(WSTRING,DWORD):BOOL:Kernel32.dll
  296.  
  297. DEF_DLL SetFilePointer(DWORD,LONG,Var LONG,DWORD):DWORD:Kernel32.dll
  298.  
  299. // for SetFilePointer()
  300. CONST FILE_BEGIN = 0
  301. CONST FILE_CURRENT = 1
  302. CONST FILE_END = 2
  303. // SetFilePointer() retuen
  304. CONST INVALID_SET_FILE_POINTER = $FFFFFFFF
  305.  
  306.  
  307.  
  308. //typedef struct _FILETIME { /* ft */
  309. // DWORD dwLowDateTime;
  310. // DWORD dwHighDateTime;
  311. //} FILETIME;
  312.  
  313. //typedef struct _SYSTEMTIME { /* st */
  314. // WORD wYear;
  315. // WORD wMonth;
  316. // WORD wDayOfWeek;
  317. // WORD wDay;
  318. // WORD wHour;
  319. // WORD wMinute;
  320. // WORD wSecond;
  321. // WORD wMilliseconds;
  322. //} SYSTEMTIME;
  323.  
  324.  
  325.  
  326. //DWORD GetFileAttributes(
  327. // LPCTSTR lpFileName // ファイルまたはディレクトリの名前
  328. //);
  329. //Kernel32.lib
  330. DEF_DLL GetFileAttributes(STRING):DWORD:Kernel32.dll
  331.  
  332. //DWORD GetFileSize(
  333. // HANDLE hFile, // ファイルのハンドル
  334. // LPDWORD lpFileSizeHigh // ファイルサイズの上位ワード
  335. //);
  336. //Kernel32.lib
  337. IFB 0=HANDLE_IS_LONG THEN
  338. DEF_DLL GetFileSize(DWORD, {DWORD}):DWORD:Kernel32.dll
  339. ELSE
  340. DEF_DLL GetFileSize(LONG, {DWORD}):DWORD:Kernel32.dll
  341. ENDIF
  342. //※4G以上のファイルサイズは2番めのパラメータの戻り値があるので注意
  343. //参照GetFileSizeEx
  344.  
  345. //BOOL GetFileTime(
  346. // HANDLE hFile, // ファイルのハンドル
  347. // LPFILETIME lpCreationTime, // 作成日時
  348. // LPFILETIME lpLastAccessTime, // 最終アクセス日時
  349. // LPFILETIME lpLastWriteTime // 最終更新日時
  350. //);
  351. //Kernel32.lib
  352. IFB 0=HANDLE_IS_LONG THEN
  353. DEF_DLL GetFileTime(DWORD, {DWORD, DWORD}, {DWORD, DWORD}, {DWORD, DWORD}):BOOL:Kernel32.dll
  354. ELSE
  355. DEF_DLL GetFileTime(LONG, {DWORD, DWORD}, {DWORD, DWORD}, {DWORD, DWORD}):BOOL:Kernel32.dll
  356. ENDIF
  357. //BOOL FileTimeToLocalFileTime(
  358. // CONST FILETIME *lpFileTime, // 変換するべき UTC のファイル時刻
  359. // LPFILETIME lpLocalFileTime // 変換後のファイル時刻
  360. //);
  361. //Kernel32.lib
  362. DEF_DLL FileTimeToLocalFileTime({DWORD, DWORD}, {DWORD, DWORD}):BOOL:Kernel32.dll
  363.  
  364. //BOOL LocalFileTimeToFileTime(
  365. // CONST FILETIME *lpLocalFileTime, // ローカルのファイル時刻
  366. // LPFILETIME lpFileTime // UTC ファイル時刻
  367. //);
  368. //Kernel32.lib
  369. DEF_DLL LocalFileTimeToFileTime({DWORD, DWORD}, {DWORD, DWORD}):BOOL:Kernel32.dll
  370.  
  371. //BOOL SystemTimeToFileTime(
  372. // CONST SYSTEMTIME *lpSystemTime, // システム日時
  373. // LPFILETIME lpFileTime // ファイル時刻
  374. //);
  375. //Kernel32.lib
  376. DEF_DLL SystemTimeToFileTime({WORD,WORD,WORD,WORD,WORD,WORD,WORD,WORD}, {DWORD, DWORD}):BOOL:Kernel32.dll
  377.  
  378. //BOOL FileTimeToSystemTime(
  379. // CONST FILETIME *lpFileTime, // 変換するべきファイル時刻
  380. // LPSYSTEMTIME lpSystemTime // システム日時が格納される構造体
  381. //);
  382. //Kernel32.lib
  383. DEF_DLL FileTimeToSystemTime({DWORD, DWORD}, {WORD,WORD,WORD,WORD,WORD,WORD,WORD,WORD}):BOOL:Kernel32.dll
  384.  
  385. //DWORD GetEnvironmentVariable(
  386. // LPCTSTR lpName, // 環境変数の名前
  387. // LPTSTR lpBuffer, // 変数の値が格納されるバッファ
  388. // DWORD nSize // バッファのサイズ
  389. //);
  390. DEF_DLL GetEnvironmentVariableA(STRING, Var STRING, WORD ):DWORD:Kernel32.dll
  391. DEF_DLL GetEnvironmentVariableW(WSTRING, Var WSTRING, WORD ):DWORD:Kernel32.dll
  392.  
  393.  
  394. ///// Win32API エラー関連
  395. // for FormatMessage()
  396.  
  397. // _Post_equals_last_error_ DWORD GetLastError();
  398. DEF_DLL GetLastError(VOID):DWORD:Kernel32.dll
  399.  
  400. // DWORD FormatMessage(
  401. // DWORD dwFlags, /* ソースおよび処理オプション */
  402. // LPCVOID lpSource, /* ソース メッセージのアドレス */
  403. // DWORD dwMessageId, /* 要求するメッセージ識別子 */
  404. // DWORD dwLanguageId, /* 要求されたメッセージの言語識別子 */
  405. // LPTSTR lpBuffer, /* メッセージ バッファのアドレス */
  406. // DWORD nSize , /* メッセージ バッファの最大サイズ */
  407. // va_list *Arguments /* メッセージ挿入句の配列のアドレス */
  408. // );
  409. DEF_DLL FormatMessageA(DWORD,DWORD,DWORD,DWORD, Var STRING,DWORD,DWORD):DWORD:Kernel32.dll
  410. DEF_DLL FormatMessageW(DWORD,DWORD,DWORD,DWORD, Var WSTRING,DWORD,DWORD):DWORD:Kernel32.dll
  411.  
  412. CONST FORMAT_MESSAGE_FROM_SYSTEM = $00001000
  413. CONST FORMAT_MESSAGE_IGNORE_INSERTS = $00000200
  414.  
  415. ///====================================
  416.  
  417. /// Win32_file.uws ///====================================
  418.  
  419. call win32api_Kernel32.uws
  420.  
  421. /////
  422.  
  423. FUNCTION IsExistFileA(sFullpathName)
  424. DIM hFile = CreateFileA(sFullpathName, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
  425. CloseHandle(hFile)
  426. RESULT = (INVALID_HANDLE_VALUE <> hFile)
  427. FEND
  428.  
  429. FUNCTION IsExistFileW(sFullpathName)
  430. DIM hFile = CreateFileW(sFullpathName, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
  431. CloseHandle(hFile)
  432. RESULT = (INVALID_HANDLE_VALUE <> hFile)
  433. FEND
  434.  
  435. FUNCTION IsExistDirectoryA(sFullpathName)
  436. RESULT = IsExistFileA(sFullpathName+"\NUL")
  437. FEND
  438.  
  439. FUNCTION IsExistDirectoryW(sFullpathName)
  440. RESULT = IsExistFileW(sFullpathName+"\NUL")
  441. FEND
  442.  
  443. // 文字列を書き込む
  444. // hFile: CreateFile()でオープンされているファイルハンドル
  445. // str: () 書き込む文字列
  446. // nWrite:書き込み文字数
  447. // UWSCで 書き込むべきShift_JIS文字数はLENGTH()ではなくLENGTHB()なので注意
  448. // nResult:処理後書き込まれた文字数
  449. FUNCTION WriteFileStr(hFile, str, nWrite, var nResult)
  450. DEF_DLL WriteFile(DWORD, STRING, DWORD,var DWORD,DWORD):BOOL:Kernel32.dll
  451. RESULT = WriteFile(hFile, str, nWrite, nResult, 0)
  452. FEND
  453.  
  454. // 文字列を読み込む
  455. // hFile: CreateFile()でオープンされているファイルハンドル
  456. // str: 読み込み先文字列 読み込むサイズ以上の文字数をセットして渡すこと
  457. // nWnRead:読み込み文字数
  458. // UWSCで 読み込むべきShift_JIS文字数はLENGTH()ではなくLENGTHB()なので注意
  459. // nResult:処理後読み込まれた文字数
  460. FUNCTION ReadFileStr(hFile, var str, nRead, var nResult)
  461. DEF_DLL ReadFile(DWORD, var STRING, DWORD,var DWORD,DWORD):BOOL:Kernel32.dll
  462. DIM n
  463. DIM buf = str
  464. FOR n=1 TO nRead-LENGTHB(str)
  465. buf = buf + " "
  466. NEXT
  467. RESULT = ReadFile(hFile, buf, nRead, nResult, 0)
  468. str = COPYB(buf, 1, nResult)
  469. FEND
  470.  
  471.  
  472. // 数値を1~4バイト分書き込む
  473. // hFile: CreateFile()でオープンされているファイルハンドル
  474. // num4B:書き込む数値
  475. // UNSIGNED_LONG(DWRD) の FFFFFFFF は4294967295 なのでそれより大きな値は変化することに注意
  476. // 負数はLONG_MIN = -2147483648 までは書き込み可能だが読み込み時に注意が必要
  477. // 読み出し時には符号なしLONGとして読み込まれるため符号付きに変換する必要がある
  478. // wsprintfA(buffer,"%ld",number);signed_number = VAL(buffer)などとすることで可能
  479. // (wsprintfA()はuser32.dllの関数)
  480. // nWrite : 書き込みバイト数 1~4
  481. // num4B が $01234567 のとき
  482. // nWrite=1 なら 67、2なら 4567、3なら 234567 の部分が書き込まれる
  483. // ファイルには上位バイトと下位バイト、上位ワードと下位ワードが逆転して書き込まれる点に注意
  484. // $01234567 を1から4バイト書き込んだときのイメージは
  485. // 「67」, 「67 45」, 「67 45 23」, 「67 45 23 01」
  486. FUNCTION WriteFileNum4B(hFile, var num4B, nWrite, var nResult)
  487. DEF_DLL WriteFile(DWORD, var DWORD, DWORD,var DWORD,DWORD):BOOL:Kernel32.dll
  488. IFB 0 > nWrite THEN
  489. nWrite = 0
  490. ELSEIF 4 < nWrite THEN
  491. nWrite = 4
  492. ENDIF
  493. RESULT = WriteFile(hFile, num4B, nWrite, nResult, 0)
  494. FEND
  495.  
  496. // 負数はLONG_MIN = -2147483648 までは書き込み可能だが読み込み時に注意が必要
  497. // 読み出し時には符号なしLONGとして読み込まれるため符号付きに変換する必要がある
  498. // wsprintfA(buffer,"%ld",number);signed_number = VAL(buffer)などとすることで可能
  499. // (wsprintfA()はuser32.dllの関数)
  500.  
  501. // 数値を1~4バイト分読み込む
  502. // nRead : 1-4
  503. FUNCTION ReadFileNum4B(hFile, var num4B, nRead, var nResult)
  504. DEF_DLL ReadFile(DWORD, var DWORD, DWORD,var DWORD,DWORD):BOOL:Kernel32.dll
  505. IFB 0 > nRead THEN
  506. nRead = 0
  507. ELSEIF 4 < nRead THEN
  508. nRead = 4
  509. ENDIF
  510. num4B = 0
  511. RESULT = ReadFile(hFile, num4B, nRead, nResult, 0)
  512. FEND
  513.  
  514.  
  515. ///====================================
  516.  
  517.  
  518. /// Win32_error.uws ///====================================
  519.  
  520. call win32api_Kernel32.uws
  521.  
  522. FUNCTION MessageIfErrorOccurred( point = "", condition = TRUE)
  523. DIM nError = GetLastError()
  524. IFB TRUE = condition AND 0 < nError THEN
  525. MSGBOX(point +" error:"+nError+"(0x"+FORMAT(nError,1,-1)+")<#CR>"+ GetErrorMessage(nError))
  526. ENDIF
  527. RESULT = nError
  528. FEND
  529.  
  530. FUNCTION GetErrorMessage(iErrorNumber)
  531. DIM strErrorMessage="000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"+_
  532. "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"+_
  533. "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
  534. FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM+FORMAT_MESSAGE_IGNORE_INSERTS, 0, iErrorNumber, 0, strErrorMessage, 300, 0)
  535. RESULT=strErrorMessage;
  536. FEND
  537.  
  538. ///====================================
  539.  
  540.  
  541.  
  542.  
Add Comment
Please, Sign In to add comment