Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

несоответствие типов [D5, Win2k]


Страницы:   1 2

Fixxxer ©   (2003-05-18 16:13:00) 

Как присвоить значение переменной типа String массиву типа Char

И почему не работает этот код:
var
S: array [1..32] of Char;
begin
S:="Строка"
end


Malder   (2003-05-18 20:58:00) [1]

Ребят, я вас не понимаю:

TNMUDP component

Declaration
procedure ReadBuffer(var Buff: array of char; var length: integer);

Description
The ReadBuffer method reads incoming UDP data into a Buffer.

Parameters:
The Buff parameter specifies the buffer to read the data into.
The length parameter is the size of the data to be read.


Какие

l:integer;
begin
SetLength(s,NumberBytes);
NMUDP1.ReadBuffer(s[1], l);


Нельзя написать nmudp1.ReadBuffer(<array of char>,NumberBytes); ?


Fixxxer   (2003-05-18 20:18:00) [2]


> Palladin © (18.05.03 18:05)
> да
> бросай это грязное дело...
> работай с SendStream


Результат к сожалению один и тот же :(


Fixxxer   (2003-05-18 20:17:00) [3]


> VaS © (18.05.03 19:43)
> Вообще-то должно работать... Попробуй так:


Попробовал.
В строке
NMUDP1.SendBuffer(ps, Length(S)); - несоответствие типов.
ps у нас как PChar, а нужен array of Char.
Если пишу так:
NMUDP1.SendBuffer(ps^, Length(S));
то всё равно приходит черт знает что.


VaS   (2003-05-18 19:43:00) [4]

Вообще-то должно работать... Попробуй так:

var
S: String;
ps: PChar;
begin
S := Edit1.Text;
ps := StrAlloc(Length(s));
try
StrPCopy(S, ps);
NMUDP1.SendBuffer(ps, Length(S));
finally
StrDispose(ps);
end;
end;


Fixxxer   (2003-05-18 18:05:00) [5]


> Palladin
пробуй


Попробовал. Не помогает.
Отправляю текст "Не правильная работа с буффером"
Принимаю: "Не пмц"

Всегда только первые 4 символа правильные, а дальше идет черт знает что.


Palladin   (2003-05-18 18:05:00) [6]

да
бросай это грязное дело...
работай с SendStream

на отправителе

procedure TForm1.Button1Click(Sender: TObject);
var
s:TMemoryStream;
begin
s:=TMemoryStream.Create;
s.Write(Edit1.text[1],length(edit1.text));
NMUDP1.SendStream(s);
s.free;
end;

на приемщике

procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
s:TMemoryStream;
sr:string;
begin
s:=TMemoryStream.Create;
NMUDP1.ReadStream(s);
s.Seek(0,soFromBeginning);
setlength(sr,s.Size);
s.ReadBuffer(sr[1],length(sr));
Memo1.Lines.Add(sr);
end;


Palladin   (2003-05-18 17:57:00) [7]

мда... бяка творится...
пробуй

на отправителе

NMUDP1.SendBuffer(Edit1.text[1],length(Edit1.Text));

на приемщике

var
s:string;
l:integer;
begin
SetLength(s,NumberBytes);
NMUDP1.ReadBuffer(s[1],l);
Memo1.Lines.Add(s);
end;

это не искажение, что то происходит с последним символом, видимо компонент не верно работает с буффером...


Fixxxer   (2003-05-18 17:46:00) [8]


> DVM
например?


Отсылаю текст "Edit1", а приходит "Edit


DVM   (2003-05-18 17:41:00) [9]


> И приходит искаженное то, что отправлялось.

например?
NMUDP1.SendBuffer(s^,strlen(s)); не пробовал? Я помню, колупался с одной функцией виндов для работы с файлами, так она только так почему то работала, а с Length искажала инфу.


Fixxxer   (2003-05-18 17:34:00) [10]

Отсылаю так:

var
S: String;
begin
S:=Edit1.Text;
NMUDP1.SendBuffer(PChar(S)^, Length(S));
end;

Принимаю так:

procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
Mes: array [0..255] of Char;
L: Integer;
begin
NMUDP1.ReadBuffer(Mes, L );
Memo1.Lines.Add("["+FromIP+"]: "+Mes);
end;

И приходит искаженное то, что отправлялось.


Palladin   (2003-05-18 17:23:00) [11]

procedure tform1.sef(s:array of char;len:integer);
var
i:integer;
begin
for i:=0 to len-1 do edit1.text:=Edit1.Text+s[i];
end;

procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
s:="112";
Edit1.Text:="";
sef(pchar(s)^,length(s));
end;

ничего нигде не искажается, ищи ошибку у себя


Fixxxer   (2003-05-18 17:18:00) [12]

только почему используя эти указатели пришедшие данные искажаются?


Fixxxer   (2003-05-18 17:14:00) [13]


> Palladin ©



> а еще проще


А можно и проще :))

Спасибо всем!


Fixxxer   (2003-05-18 17:13:00) [14]


> DVM ©



> так не получится?


Да. Действительно. Так лучше.


Palladin   (2003-05-18 17:12:00) [15]


> Fixxxer © (18.05.03 16:54)

а собственно в чем проблема?
можно как DVM © (18.05.03 17:02)
а еще проще

var
s:string;
begin
s:="Вот string";
NMUDP1.SendBuffer(pchar(s)^,length(s));
end;


DVM   (2003-05-18 17:02:00) [16]

имелось ввиду NMUDP1.SendBuffer(s^,strlen(s));

по крайней мере компилятор не ругается.


DVM   (2003-05-18 16:58:00) [17]


> как ты отправил бы String этим методом?

var s:pchar;
begin
s:=pchar("kslflhsdflslfa");
NMUDP1.SendBuffer(s^,.......);
end;

так не получится?


Fixxxer   (2003-05-18 16:54:00) [18]


> Palladin © (18.05.03 16:43)
> а String это по твоему что такое?

NMUDP1.SendBuffer(Buff: array of Char; length: Integer)

как ты отправил бы String этим методом?


Palladin   (2003-05-18 16:43:00) [19]

а String это по твоему что такое?


Fixxxer   (2003-05-18 16:41:00) [20]

Лично мне это нужно для работы с NMUDP компонентом. Там передача данных идет как массив Char.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо