• ベストアンサー

グローバルメモリについて

SetClipboardData関数を使いたいのですが,「データが入っているグローバルメモリのハンドルを指定します。」というヘルプ内の文章の意味がわかりません。 クリップボードに文字列をコピーしたいのですが,どうすればよろしいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

単にGlobalAlloc(グローバルメモリを確保する関数)が返すメモリハンドルを指定すればよいのでは? 手順としては 1.GlobalAllocでメモリを確保 2.メモリをロックし、文字列を移す 3.メモリをアンロックする 4.SetClipboardDataにメモリハンドルを渡す のようになると思います。 だいぶ昔にやった記憶しかないので、うまくいくか分かりませんが。

tomo5
質問者

お礼

迅速な解答ありがとうございます。 メモリのロックということがまだ理解できていませんが, 調べつつやってみます。 ありがとうございました。

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

簡単に流れを書くと、こんな感じ。   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() しちゃ 駄目ですよ。

関連するQ&A