Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Delphi 2010 в delphi работает норм, срочно! ! курсач горит, через час сдавать (( а не работает

Наумов Дмитрий Ученик (227), закрыт 13 лет назад
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);begin MemStream:= TIdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
begin
MemStream:= TMemoryStream.Create;
MemStream.CopyFrom(AData, AData.Size);
MemStream.SaveToFile('C:\logo.jpg');
form7.Image1.Picture.LoadFromFile('C:\logo.jpg');
if form7.Showing then
begin
serversocket1.Socket.Connections[UserList.ItemIndex].SendText('ikr');
end;
MemStream.Free;
end;

Checking project dependencies...
Compiling Project1.dproj (Debug configuration)
[DCC Warning] Unit1.pas(93): W1057 Implicit string cast from 'AnsiString' to 'string'
[DCC Warning] Unit1.pas(97): W1057 Implicit string cast from 'AnsiString' to 'string'
[DCC Warning] Unit1.pas(157): W1019 For loop control variable must be simple local variable
[DCC Error] Unit1.pas(229): E2010 Incompatible types: 'TStream' and 'TBytes'
[DCC Error] Unit1.pas(229): E2029 '(' expected but ')' found
[DCC Error] Unit1.pas(231): E2066 Missing operator or semicolon
[DCC Warning] Unit1.pas(269): W1019 For loop control variable must be simple local variable
[DCC Warning] Unit1.pas(279): W1019 For loop control variable must be simple local variable
[DCC Warning] Unit1.pas(289): W1019 For loop control variable must be simple local variable
[DCC Warning] Unit1.pas(299): W1019 For loop control variable must be simple local variable
[DCC Fatal Error] Unit1.pas(10): F2063 Could not compile used unit 'Unit1'
Failed
Elapsed time: 00:00:01.1

помогите срочно курсач сдавать через 2 часа, а не фурычит ((
Дополнен 13 лет назад
Ругаеться на эту строку
Дополнен 13 лет назад
MemStream.CopyFrom(AData, AData.Size);
Дополнен 13 лет назад
в 7 делфи нормально работает, в 2010 не хочет, не нужно мне копировать то что я так в сети найти могу %)
Лучший ответ
ru-admin Гуру (3323) 13 лет назад
Пример работы с UDP
(***************** РАБОТА НА СТОРОНЕ КЛИЕНТА **********************************)
procedure TMainForm.FormCreate(Sender: TObject);
var
s: string;
begin
// здесь мы просим ввести IP адрес, по умолчанию стоит "localhost", так что если
// мы ни чего не введем, то прогрмма будет общаться сама с сабой, ну а если
// введем, то неплохобы позаботится о наличии на удаленном компьютере
// запущенной копии нашей программы, для проверки работоспособности
if InputQuery('Программа-пример по UDP',
'Введите IP адрес удаленной машины, иначе будете разговаривать сами с сабой :)',s)=true then
UDPClient.Host:=s;
end;
procedure TMainForm.SetFileClick(Sender: TObject);
begin
// здесь просто указываем файл для отправки
if OpenDialog.Execute then FileEdit.Text:=OpenDialog.FileName;
end;
procedure TMainForm.SendBtnClick(Sender: TObject);
begin
// здесь просто отправляем текстовое сообщение
UDPClient.Send('text'+SendEdit.Text);
SendEdit.Clear;
end;
procedure TMainForm.SendFileBtnClick(Sender: TObject);
var
MemStream : TMemoryStream;
begin
// здесь отправляем файл
// создаем поток в памяти
MemStream:= TMemoryStream.Create;
// загружаем файл в наш поток
MemStream.LoadFromFile(FileEdit.Text);
//
// отправляем наш поток
UDPClient.SendBuffer(MemStream.Memory^,MemStream.Size);
// освобождаем память
MemStream.Free;
end;

(***************** РАБОТА НА СТОРОНЕ СЕРВЕРА **********************************)
procedure TMainForm.UDPServerUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
// объявляем 2 потока, один для строк, другой для любой другой информации
// в нашем случае для файлов (так же можно пересылать что угодно)
StrStream : TStringStream;
MemStream : TMemoryStream;
begin
// здесь происходит обработка данных пришедших от клиента
// на данном этапе есть маленькая логическая бомба, все что длинной до 255
// я считаю текстом (стандартное ограничение строковой переменной) , а что
// больше 255, то это уже файл, на самом деле и файл может весить 255,
// это конечно редкость но может быть, как это исправить подумай сам (мне лень) :)
if AData.Size<=255 then
begin
// итак к нам пришел текст, работаем с потоком строк
// создаем строковый поток
StrStream:=TStringStream.Create('');
// читаем данные в этот поток из пришедшего потока
StrStream.CopyFrom(AData, AData.Size);
// добавляем данные в приемник, указывая перед этим от кого этот текст
Memo.Lines.Add(ABinding.PeerIP+': '+copy(StrStream.DataString,5,length(StrStream.DataString)));
// освобождаем память
StrStream.Free;
end else
begin
// итак к нам пришел файл, работаем с потоком в памяти
MemStream:= TMemoryStream.Create;
// загружаем файл в наш поток
MemStream.CopyFrom(AData, AData.Size);
// выводим диалог сохранения файла
if SaveDialog.Execute then MemStream.SaveToFile(SaveDialog.FileName);
// освобождаем память
MemStream.Free;
end;
end;
end.
Остальные ответы
И.А. Голованов Оракул (75396) 13 лет назад
Судя по диагностике ругается не только на
MemStream.CopyFrom(AData, AData.Size);
а на дохрена всякого

По одной только процедуре (или куску? 3 begin и 2 end - не срастается) без указания типов in-out и номеров строк такое не подправить

[DCC Warning] Unit1.pas(93): W1057 Implicit string cast from 'AnsiString' to 'string'
или
[DCC Error] Unit1.pas(231): E2066 Missing operator or semicolon
Любого из этого достаточно чтоб на остальном компилятору крышу снести
Например в новой версии 'AnsiString' и 'string' чуть отличаются от старой и ФИНИШ. Обязательно явное преобразование
Похожие вопросы