初めまして
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の初期化方法がよくわからないのですがこれであっていますでしょうか?
よろしくお願いします
すいません
LPWSTR Buf=new char[MAX_PATH];
のところは
LPWSTR Buf=new WCHAR[MAX_PATH];
の間違いです
バッファ足りてる?
英数字の場合、変換によって二倍のサイズに膨れるけど。
1.エディットから取得した文字数が0の場合のチェックをしていない
2.最後に Buf[Len] = WCHAR( 0); の処理がされていない
以外は正常です。
どの行でハングするか示してください。
また、コンパイラのバージョンなどの情報もあったほうが良いでしょう。
>>επιστημηさん
ありがとうございます。原因はバッファが足りていませんでした。
>>仲澤@失業者
返信ありがとうございます
>1.エディットから取得した文字数が0の場合のチェックをしていない
指摘ありがとうございます。修正しました
てかWindow-textをUNICODEで欲しいなら単刀直入に
GetWindowTextLengthW と GetWindowTextW 使えばいしんじゃなくて?