Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.04;
Скачать: CL | DM;

Вниз

Понял что совсем ничего непонял......   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
14-9274
jk
2002-01-16 18:40
2002.03.04
Гребаный ActiveX


3-9085
HDD
2002-02-06 01:27
2002.03.04
Помогите пожалуйста срочно нужно. Очень срочно


1-9149
Squall
2002-02-17 22:56
2002.03.04
Скорость Progress Bar a!!!


7-9317
DenKop
2001-11-26 21:20
2002.03.04
Рабочий стол.


1-9230
AZ
2002-02-15 07:40
2002.03.04
Общие соображения о межкомпонентной привязке изменений свойств