ReadFile について練習していますが、次の事がわからず、困っています。
ReadFile はその性質上、LPVOID 型でしか、読み取ったデータを保管できないと思います。
しかし、Win32APIで文字列を扱う際には、TCHAR などの文字列型でないと、TEXTOUTなどが使用できません。
なので、TEXTOUTなどがうまく行かず、読み取り内容の表示方法および確認方法が分からずに困っています。
いったい、どうすればよいのでしょうか?
書いたコードは、とりあえずグローバル変数として を記述しており、
wWinMAin には、
// TODO: ここにコードを挿入してください。
HANDLE hFile;
hFile = CreateFile(
TEXT("test.txt"), GENERIC_READ, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
);
if (hFile == INVALID_HANDLE_VALUE) {
MessageBox(
NULL, TEXT("ファイルを開けませんでした"),
TEXT("エラー"), MB_OK
);
return 1;
}
strFile = (LPSTR)malloc(GetFileSize(hFile, NULL));
ReadFile(hFile, strFile, GetFileSize(hFile, NULL), &wReadSize, NULL);
CloseHandle(hFile);
また、手本にした、Wisdomソフトさまのコードでは、
http://wisdom.sakura.ne.jp/system/winap ... in113.html
DrawText を使っているので、それで文字出力をするコードを、下記のように
// TODO: HDC を使用する描画コードをここに追加してください...
GetClientRect(hWnd, &rect);
DrawText(hdc, (LPCWSTR)strFile, wReadSize, &rect, DT_LEFT);
// Visual Stuido のエラーメッセージでLPCWSTRと互換性が無いと出たので. エラーコード: C2664
// DrawText(hdc, strFile, wReadSize, &rect, DT_LEFT);
// 手本の元サイトには、こうあるが、これだとコンパイルエラー
EndPaint(hWnd, &ps);
しかし、これを実行しても、文字化けをしてしまい、意味不明の■■や漢字が大量に何十個も出てきます。
また、読み取り対象ファイル"test.txt"には と書いています。
なお、Wisdomソフトさまのコードを参考にしましたが、
http://wisdom.sakura.ne.jp/system/winap ... in113.html
上記のコードでは何箇所か、私の目的のために変更しています。
コードが手本サイトのそのままだと、私のVisual Studioの環境では実行できない事と、
最終的に私がゲームのソースコードに組み込んで使いたいため、
デスクトップウィザードで作成されるWin32テンプレートにコードを組み込んだ形に、
当掲示板で紹介したコードを変更してあります。