- ベストアンサー
グローバルメモリについて
SetClipboardData関数を使いたいのですが,「データが入っているグローバルメモリのハンドルを指定します。」というヘルプ内の文章の意味がわかりません。 クリップボードに文字列をコピーしたいのですが,どうすればよろしいでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
単にGlobalAlloc(グローバルメモリを確保する関数)が返すメモリハンドルを指定すればよいのでは? 手順としては 1.GlobalAllocでメモリを確保 2.メモリをロックし、文字列を移す 3.メモリをアンロックする 4.SetClipboardDataにメモリハンドルを渡す のようになると思います。 だいぶ昔にやった記憶しかないので、うまくいくか分かりませんが。
その他の回答 (1)
- a-kuma
- ベストアンサー率50% (1122/2211)
簡単に流れを書くと、こんな感じ。 LPCSTR pszSrc; /* これがクリップボードに複写する文字列を指す */ LPCSTR pszDest; HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, lstrlen(pszSrc) + 1); pszDest = GlobalLock(hGlobal); lstrcpy(pszDest, pszSrc); GlobalUnlock(hGlobal); OpenClipboard(); EmptyClipboard(); SetClipboardData(CF_TEXT, hGlobal); CloseClipboard(); エラーチェックなんかを全然やってないので、適宜追加してね。 あと、hGlobal が指すグローバルメモリは SetClipboardData() が成功した 後は、システムが管理することになるので、勝手に GlobalFree() しちゃ 駄目ですよ。
お礼
迅速な解答ありがとうございます。 メモリのロックということがまだ理解できていませんが, 調べつつやってみます。 ありがとうございました。