Shift_JisからUnicodeに変換するときにアクセス違反が起きる – プログラミング – Home

通知
すべてクリア

[解決済] Shift_JisからUnicodeに変換するときにアクセス違反が起きる


ミッチー
 ミッチー
(@ミッチー)
ゲスト
結合: 13年前
投稿: 2
Topic starter  

初めまして

MultiByteToWideCharを使ってShift_JisからUnicodeに変換するコードを書いたのです
が、変換前の値の入ってるLPTSTRの値によってメモリーのアクセス違反が起きてしまう
ことがあるのですが、原因が分かりません。

ソースです

LPTSTR lpszBuf;
LPWSTR Buf=new char[MAX_PATH];

int Len;
int nLen;
HGLOBAL hMem;
nLen = GetWindowTextLength(edt);//EDITコントロールから文字を取得しています
hMem = GlobalAlloc(GHND,sizeof(char)*nLen + 1);
lpszBuf = (char *)GlobalLock(hMem);
GetWindowText(edt,lpszBuf,nLen + 1);

Len=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,lpszBuf,nLen,NULL,0);
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,lpszBuf,nLen,Buf,Len);

あと、LPWSTRの初期化方法がよくわからないのですがこれであっていますでしょうか?

よろしくお願いします


引用未解決
トピックタグ
ミッチー
 ミッチー
(@ミッチー)
ゲスト
結合: 13年前
投稿: 2
Topic starter  

すいません

LPWSTR Buf=new char[MAX_PATH];
のところは
LPWSTR Buf=new WCHAR[MAX_PATH];
の間違いです


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

バッファ足りてる?
英数字の場合、変換によって二倍のサイズに膨れるけど。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

1.エディットから取得した文字数が0の場合のチェックをしていない
2.最後に Buf[Len] = WCHAR( 0); の処理がされていない

以外は正常です。
どの行でハングするか示してください。
また、コンパイラのバージョンなどの情報もあったほうが良いでしょう。


返信引用
ミッチー
 ミッチー
(@ミッチー)
ゲスト
結合: 20年前
投稿: 2
 

>>επιστημηさん
ありがとうございます。原因はバッファが足りていませんでした。

>>仲澤@失業者
返信ありがとうございます
>1.エディットから取得した文字数が0の場合のチェックをしていない
指摘ありがとうございます。修正しました


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

てかWindow-textをUNICODEで欲しいなら単刀直入に
GetWindowTextLengthW と GetWindowTextW 使えばいしんじゃなくて?


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました