Форум: "Сети";
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];
ВнизПонял что совсем ничего непонял...... Найти похожие ветки
← →
4ainick (2001-12-18 10:07) [0]Здраствуйте!...
возник у меня вопрос..... ...(точнее их оказалась куча).
//( находится в разделе Net )
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
buffer: Pointer;
bufflen: integer;
Somevariable: pchar;
begin
bufflen := Socket.ReceiveLength;
socket.ReceiveBuf(buffer,bufflen);
somevariable:=pchar(@buffer);
end;
решением на него оказалось
var
buffer:string;
...
SetLength(buffer, socket.ReceiveBuf(Pointer(nil)^, -1));
SetLength(buffer, socket.ReceiveBuf(Pointer(buffer)^, bufflength));
== взято из source Vcl
но понять охота что значит Pointer(nil)^ - адрес указывающий на nil (никуда?) или адрес nil? или что -то ещё,
string - указатель на первый байт строки или как?
array of char - указатель на указатель первого элемента или нет?
а что если в параметрах функции написано "var Buf" - это указатель (тогда почему не поинтер) или просто именованная область памяти (читай переменная)?
Pointer^ - содержимое памяти на которую указывает pointer?
Addr() - возвращает указатель на область памяти где хранится значение переменной?
вообщем я уже совсем запутался... если, и где я неправ.
← →
4ainick (2001-12-18 10:18) [1]url предидущего вопроса. http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1008578444&n=4
← →
Digitman (2001-12-18 11:33) [2]var
buffer: Pointer;
bufflen: integer;
Somevariable: pchar;
begin
bufflen := Socket.ReceiveLength; // получаем размер принятых данных
getmem(buffer, bufflen); // выделяем память под буфер
socket.ReceiveBuf(buffer^,bufflen); //читаем данные в буфер
somevariable:=pchar(buffer); // интерпретируем буфер как указатель на строковые данные
.....
end;
это - копия моего ответа на предыдущий твой вопрос (на который ты сослался)
и что здесь непонятного ?
← →
Digitman (2001-12-18 11:34) [3]var
buffer: Pointer;
bufflen: integer;
Somevariable: pchar;
begin
bufflen := Socket.ReceiveLength;
getmem(buffer, bufflen);
socket.ReceiveBuf(buffer^,bufflen);
somevariable:=pchar(buffer);
.....
end;
что здесь непонятного ?
← →
Polevi (2001-12-18 17:16) [4]но понять охота что значит Pointer(nil)^ - адрес указывающий на nil (никуда?) или адрес nil? или что -то ещё,
Если охота понять - загляни в ScktComp.pas
function TCustomWinSocket.ReceiveBuf(var Buf; Count: Integer): Integer;
var
ErrorCode: Integer;
begin
Lock;
try
Result := 0;
if (Count = -1) and FConnected then
ioctlsocket(FSocket, FIONREAD, Longint(Result))
То есть в случае Count=-1 ф-ию ReceiveBuf не интересует Buf - она в него ничего не пишет - только возвращает кол-во байт в гнезде. Поэтому в этом случае не важно, какой указатель будет передан - Pointer(nil)^ вполне подойдет
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c