
あるHPのコードを参考に文字をクリップボードへ
コピーするコードを書いてみましたが、エラーが
できます。なにかおかしいかご指摘いただけないでしょうか?
HGLOBAL hText;
wchar_t *pText;
hText = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, 4);
pText = (wchar_t*)GlobalLock(hText);
lstrcpy(pText, L"abc");
GlobalUnlock(hText);
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_TEXT, hText);//ここでヒープが壊れていると起こられます。
CloseClipboard();
もっとも単純なテストコードです。
いろいろとチェックを手抜きしてますが、とりあえずOKとします。
No.1ベストアンサー
- 回答日時:
GlobalAllocで割り当てサイズとして「4」を指定していますが、これは「4バイト」を意味します。
ところが、lstrcpyでコピーしているL"abc"は4文字=8バイトを占有するので、確保したメモリの量を超えてメモリを書き換え(=破壊)してしまっています。
これが原因ではないでしょうか。
ご回答ありがとうございます。
いまちょうど自己解決したところです。
原因はおっしゃる通りです。
ただしくは
hText = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, 4 * sizeof(wchar_t));
です。
で、返信がない場合どうやって質問を締めようかと悩んでいたところです^^;
#いつになったらこの文字操作に慣れてくるんだろう。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
COBOLのCOMP形式について
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
2バイト文字の判定はString#get...
-
ピクセル,dpiから容量(バイト...
-
バイト列とバイナリ列の違いが...
-
SQLで1バイト、2バイト混在...
-
ビットスワップとバイトスワッ...
-
機種依存文字をチェックしたい。
-
半角、全角の判別方法
-
VB6でのファイルサイズ取得につ...
-
C++ Builderで文字列をバイトに...
-
クリップボードへのコピー
-
【VB2005】テキストボックス内...
-
URLは最高何文字まで可能なので...
-
VBAでUnicodeしか存在しない文...
-
C言語において2バイト文字を検...
-
より高速な画像の表示法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
-
COBOLのCOMP形式について
-
バイト列とバイナリ列の違いが...
-
エクセルシート名の制限を変更...
-
ピクセル,dpiから容量(バイト...
-
ビットスワップとバイトスワッ...
-
テキストBOXの入力制限について
-
機種依存文字をチェックしたい。
-
「1TB」のHDDに日本語は何字入...
-
C++ Builderで文字列をバイトに...
-
全角半角を調べるライブラリ関...
-
SQLで1バイト、2バイト混在...
-
VB6とSQL Serverの桁の扱い方に...
-
jis x 0208 について
-
VBAでShift-JISのURLエンコード
-
この関数はどのプログラミング...
-
COBOL PICTUREで X,S,Vの意味
-
半角、全角の判別方法
おすすめ情報