回答編集履歴
1
問題のある部分を追記
answer
CHANGED
@@ -25,15 +25,15 @@
|
|
25
25
|
> あとコード上で使い方がおかしいものがあったらご指摘ください。
|
26
26
|
|
27
27
|
そうですね、気がついたものとしては
|
28
|
-
|
29
28
|
* `HANDLE file`や`LPWSTR lpszbuf`がグローバル変数である必然性が無い。
|
30
29
|
* `LPTSTR`(TCHAR配列のポインター)と`LPWSTR`(WCHAR/wchar_t配列のポインター)の意識が混在している。※`TCHAR`はマルチバイト(_MBCS)とUNICODE(_UNICODE)の双方で同じコードで書くためのものです。
|
31
30
|
* `ReadFile` の返り値は`BOOL` なので、 実行結果の判定として `!= 0`は不適切。
|
32
31
|
* `GlobalAlloc(GHND...)`~`GlobalLock`~ `GlobakUnlock`~`GlobaFree` の一連の流れは作法としては正しいのですが、短期間であるならば、Cランタイムの`malloc`~`free`で充分かと思います。`GHND`フラグ(`GMEM_MOVEABLE|GMEM_ZEROINIT`)を指定した`GlobalAlloc`の使用は、昔、PCのメモリが少なかった頃に有用だったもので、現在のPC+普通のアプリケーションで厳密に使い分けるほどに有用なものでもありません。
|
33
32
|
|
34
|
-
あと、
|
33
|
+
あと、問題がある部分としては
|
35
34
|
* `GlobalAlloc`で取得したhMemoryが`NULL`であった場合でも、処理を続行している。
|
36
35
|
* `ReadFile`実行後、`lpszbuf[accbytes] = '\0';` でNULL文字を埋め込んでいるが、`lpszbuf`は`wchar_t`型のポインターなので、実際に読み込んだバイト長 * 2 の位置に`'\0'`を挿入してしまっている。(メモリを破壊している) また、`L'\0'` との表記の方がより適切。
|
36
|
+
* `cout`を使う部分ですが、`cout` では`L`で指定したワイド文字列(UNICODE)は出力できないです。`wcout` を使う必要があります。
|
37
37
|
|
38
38
|
---
|
39
|
-
|
39
|
+
です。
|