このサンプルっていいの?

VBでのクリップボードの扱いのサンプル。
SetClipboardData()などを使う。
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/Clipboard/
SetClipboardData()呼び出しの後に、GlobalFree()を呼んでいるのが、ひっかかります。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/dataexchange/clipboard/clipboardreference/clipboardfunctions/setclipboarddata.asp

If SetClipboardData succeeds, the system owns the object identified by the hMem parameter. The application may not write to or free the data once ownership has been transferred to the system, but it can lock and read from the data until the CloseClipboard function is called. (The memory must be unlocked before the Clipboard is closed.) If the hMem parameter identifies a memory object, the object must have been allocated using the function with the GMEM_MOVEABLE flag.

適当訳。(こう訳せばもっと良い日本語になるよとかの突っ込みは大歓迎でござる*1。)

SetClipboardData()が成功したら、システムはhMemパラメーターで表されるオブジェクトを所有する。アプリケーションは、いったんデータの所有権がシステムに移ったら、データに書き込んだり、データを解放したりしてはならないが、CloseClipboard()を呼ぶまでにデータをロックしたり、データから読み込んだりするのはかまわない。(メモリはクリップボードが閉じられる前に、アンロックしなければならない。)hMemがメモリオブジェクトを表すなら、そのオブジェクトはGMEM_MOVEABLEフラグを関数に指定して確保したものでなければならない。

CloseClipboard()呼び出しのあとに、GlobalFree()を呼び出すべきなんじゃないのかと思います。SetClipboardData()でのハンドルの扱いによって、見かけ上問題無く動いてしまうんじゃないかとは思いますが、それは正しい書き方をしているというのじゃありませんよね……。そこをのぞけば、役に立つサンプルだと思うんですけれども。

追記:
ちなみに日本語版のヘルプだと、所有権が移った後のデータのロックはよいか、わるいかの説明が英語版と大きく違います。英語版が最新であり、かつ基本でしょうから、英語版を信じておけばいいと思います。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpipc/html/_win32_setclipboarddata.asp

*1:でも、あまりきつい口調での突っ込みはご勘弁でござる。