![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с GlobalHandle. [D6, WinXP]
Shirson © (2003-04-07 09:01:00)У меня есть стрим, который записывает данные в буфер. Затем, этот буфер я пытаюсь положить в клипбоард.
var
ms:TMemoryStream;
pBuff:pByte;
mh:THandle;
begin
...
ms.Read(pbuff,ms.size);
MH:=GlobalHandle(pBuff);
Clipboard.SetAsHandle(49161,MH);
Проблема в том, что на строкеMH:=GlobalHandle(pBuff);Делфи вываливает дебагер. Ошибка - акцес виолэйшн.
Если буфер пустой, всё проходит тихо и спокойно (только на мне пустой буфер). Если в буфере хоть что-то есть, выскакивает дебагер.
В чём грабли?
Cobalt (2003-04-08 11:19:00) [1]The GlobalHandle function retrieves the handle associated with the specified pointer to a global memory block.
HGLOBAL GlobalHandle(
LPCVOID pMem // pointer to the global memory block
);
Parameters
pMem
Points to the first byte of the global memory block. This pointer is returned by the GlobalLockfunction.
Вот, а в 6-ой Дельфи (по крайней мере) там память выделяется именно с помощью этой Alloc
Shirson (2003-04-08 06:55:00) [2]>MBo © (07.04.03 09:21)
>1) GlobalHandle IMHO не должна иметь дело с непонятным ей буфером от MemoryStream - см. GlobalLock, GlobalAlloc
А чего в нём непонятного?
Вот такая конструкция, более ломовой вариант, без посредников, прекрасно работает :)
mh:=globalhandle(MS.memory)
Собственно, а фигли нам, кабанам :)
MBo (2003-04-07 09:21:00) [3]1) GlobalHandle IMHO не должна иметь дело с непонятным ей буфером от MemoryStream - см. GlobalLock, GlobalAlloc
2) выделена ли память под pBuff?