![]() |
|
#1
|
|||
|
|||
![]() День добрый.
Работаю с именованным каналом. Синхронный, блокирующий. Сервер ждет данных от клиента в отдельном потоке. Код:
hNewHeap:=HeapCreate(HEAP_NO_SERIALIZE,SizeOfWaitingData,0); Buffer:=HeapAlloc(hNewHeap,0,SizeOfWaitingData); repeat SuccessRead:=ReadFile(hPipe, buffer, SizeOfWaitingData, bytesRead, nil); if not SuccessRead then begin ShowMessage(_GetErrorMsg( GetLastError )); break; end; Until false; По результату - всегда SuccessRead=false, с ошибкой "Неверная попытка доступа к адресу памяти". Замена на Код:
HeapAlloc(GetProcessHeap,0,SizeOfWaitingData); Помогает выделение буфера в стэке, вида: Код:
var bufferar:array[0..2000] of byte; но мне это не надо. Также нормально работает в основном потоке программы, но это мне тоже не надо. VurtualAlloc не пробовал пока. |