◀ANSI版開発トップへ
  • 3658 GlobalAllocの質問
    • 3662 Re: GlobalAllocの質問
      • 3674 Re:GlobalAllocの質問(訂正)
        • 3676 Re2:GlobalAllocの質問(訂正)
          • 3678 Re3:GlobalAllocの質問
  • [3658] GlobalAllocの質問 fotomo 2004年07月08日 11:34

    ソースについての質問なのですが、

    クリップボードの関数やドラッグアンドドロップ編集
    するところなどでGlobalAllocでメモリ確保してますが、
    これらのメモリはどのタイミングでフリーされるのでしょうか?


    CEditView::Drop()の中で使われているGetGlobalMemory
    なんかでは素人目にはメモリを開放していないようにも見える
    のですが。
    • [3662] Re: GlobalAllocの質問 もか 2004年07月09日 21:52

      >クリップボードの関数やドラッグアンドドロップ編集
      >するところなどでGlobalAllocでメモリ確保してますが、
      >これらのメモリはどのタイミングでフリーされるのでしょうか?
      クリップボードの場合=SetClipboardDataで設定したハンドルとメモリーは、OS管理下になります。
      任意のプロセスがEmptyClipboard()を呼び出した時点でOSが開放します。

      ちなみに、SetClipboardDataしたあと、そのハンドルを開放してみると、SetClipboardDataしたプロセスでは、GetClipboardDataを使ってもデータの取得に失敗します。(Win2Kの場合)。

      一方D&Dはよく知らないので調べてみた限りでは、
      CDataObject::GetData()で、GlobalAllocしてその直後に
      > lpsm->pUnkForRelease = NULL;
      と設定してあり、IDataObject::GetData()を呼び出す側がこのメモリーを開放するという指定なので、大丈夫そうです。

      問題のデータをもらう側は、futomoさんが指摘しているとおり、
      CEditView.cpp の GetGlobalData() の戻り値をGlobalFreeする必要があるようです。

      #どうもOLE・COM周りは苦手や
      • [3674] Re:GlobalAllocの質問(訂正) もか 2004年07月12日 21:50

        >問題のデータをもらう側は、futomoさんが指摘しているとおり、
        正しくは、fotomoさんです。大変失礼しました。
        • [3676] Re2:GlobalAllocの質問(訂正) fotomo 2004年07月13日 09:55

          回答ありがとうございました。

          クリップボード系のメモリ開放タイミングに
          ついては非常に良く分かりました。

          CEditView::Drop 内で、GetGlobalData関数で
          取得したメモリへのハンドルをGlobalFreeして
          やれば良いのですね。こちらも理解可能です。

          PS:
          仕様なのだと思いますが、こんな現象を見つけました。

          ①NULLを含んだテキストをドラッグ &
          ドロップ編集すると、NULLのところでテキストが
          打ち切られてしまうようです。

          ②NULLを含んだテキストを矩形貼り付けできない
          ようです。


          では。
          • [3678] Re3:GlobalAllocの質問 もか 2004年07月14日 00:40

            >PS:
            >仕様なのだと思いますが、こんな現象を見つけました。
            をを! 報告ありがたいです。

            >(1)NULLを含んだテキストをドラッグ & ドロップ編集すると、NULLのところでテキストが打ち切られてしまうようです。
            いまのところ、仕様のようです。
            D&Dの送り側/受け取り側の両方で、サクラエディタ専用フォーマット(SakuraClip)も扱えるようにしないと直せないと思います。

            >(2)NULLを含んだテキストを矩形貼り付けできないようです。
            バグだったみたいです。

            #改行位置、一部文字を変えました。ご了承を