При копировании в буфер обмена необходимо выделить память с помощью GlobalAlloc, в туториалах советуют использовать параметр GMEM_MOVEABLE и преобразовывать затем полученный указатель (GlobalLock, а после GlobalUnlock). Но если выделить память с флагом GMEM_FIXED Необходимость в функциях GlobalLock отпадает GlobalUnlock. В добавок ко всему внешне копирование происходит точно так же. Вопрос в том, правилен ли второй способ? И если нет, то почему?
Зато внутренне может сильно отличаться от ОС, в w2k если ты выделил через GlobalAlloc(GMEM_FIXED) это равнозначно HeapAlloc и работает оно потому, что SetClipboardData сама делает GlobalLock+GlobalUnlock
А если она это делает сама, то можно ли считать второй способ корректным? Кстати, большое спасибо за оперативный ответ!
В 98SE и XP SP2 тоже нормально работает, даже HeapAlloc можно использовать вместо Global Так что похоже, что в Win32 без разницы. bogrus прав, SetClipboardData просто вызывает GlobalLock,GlobalUnlock,GlobalFree, а они работают как с moveable, так и с fixed PS: ох уж эти GlobalXXX, и чего MS их не выкинет на помойку... Просто похоже на отеческую заботу MS о наивных кодерах - поскольку после SetClipboardData блок памяти удаляется, то при при попытке GlobalLock мы получим Null и не сможем работать с удаленным блоком, а вот с fixed - пожалуйста, пока он не затрется в куче другими аллоками может создаться впечатление, что его и не удаляли