- 締切済み
Windowsプログラミングでのテキスト保存について
Windowsプログラミングでのテキスト保存について エディットコントロールに入力された文字列を取得しGlobalAlloc関数などを使いメモリを確保し CreateFile関数、WriteFile関数を使ってテキストファイルを作成するプログラムを書いたのですが マルチバイト文字でコンパイルした場合とUnicode文字でコンパイルした場合とでファイルの中身の 表示結果が異なってしまいます。 例えば ナンバーは 12 34 56 78 です。 日付 00/00 00:00:00(改行)←1行目 ナンバーは 34 56 78 90 です。 日付 00/00 00:00:00(改行)←2行目 とエディットコントロールに入力されていたものをテキストファイルに書き込むと、 Unicode文字でコンパイルしたプログラムの場合 ナンバーは 12 34 56 78 です(改行)などと途中までしか書き込まれていなかったり あるいは2行中初めの1行しか書き込まれていなかったりします。 このプログラムをマルチバイト文字でコンパイルするとエディットコントロールに入力されたとおりに ファイルに書き込まれるようです。コンパイル時どちらも構文エラーはでません。 自分なりに文字の取得方法やメモリ関係やワイド文字関連の事情などをいろいろ試してみたのですが、いまだに解決していません。分かる人がいましたらどうか教えてください。お願いします。 ちなみにエディットコントロールは複数行入力スタイルでEM_SETSEL、EM_REPLACESELで追記されていく、出力のみ可能という設定です。
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
このQ&Aのポイント
- PCに詳しくない方でも理解しやすい方法で、PIXUS MX513プリンターのアイコンが表示されない問題について解説します。
- PC上でドライバーの再インストールを行ってもPIXUS MX513プリンターのアイコンが表示されない場合、以下の方法を試してみてください。
- パソコンのデスクトップ上でプリンターのアイコンが表示されない場合、アイコンの復活方法をご紹介します。
補足
nLen=(SendMessage(hEdit1,WM_GETTEXTLENGTH,0,0)); hMem=GlobalAlloc(GHND,((sizeof(TCHAR))*(nLen)+2)); lpszBuf=(_TCHAR*)GlobalLock(hMem); GetWindowText(hEdit1,lpszBuf,nLen+2); OPENFILENAME構造体に必要情報をセット。 if(GetSaveFileName(&ofn)==0) return-1; hFile=CreateFile(szFile,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); WriteFile(hFile,lpszBuf,(DWORD)lstrlen(lpszBuf),&dwAccBytes,NULL); ファイルハンドルを閉じメモリのロック解除と解放。というようなコードです。 私も以前文字列取得時のことを調べたのですが Unicodeの場合はバイト数ではなく文字数が返されるという情報がありました。 Unicodeに対応させたいと思いいろいろ試しているのですが、これまでうまくいっていないという 状況です。この場合Unicodeに対応させるにはどうすればいいのかどうか教えてください。 お願いします。