Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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)^ вполне подойдет




Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.019 c
1-9237            dim2001               2002-02-13 19:48  2002.03.04  
стандартный диалог


14-9281           Vampire               2002-01-18 00:46  2002.03.04  
Можь знает кто?


7-9298            Unkown                2001-11-26 12:26  2002.03.04  
Чем протестировать компьютер?


3-9078            Jhonny                2002-02-07 07:07  2002.03.04  
Максимальное значение кода в базе данных


1-9144            VDXMAN                2002-02-17 17:03  2002.03.04  
HELP ME