Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

"Аналог lstrcpy, только без учета #0 (Delphi)"

Аллоха, All!
В этот знаменательный день 24 июля 2004 г.
пиво ударило мне в голову, и я наскреб:

Собственно имеется две структуры
type DriveStruct = packed record
DriveLet: array [0..3] of char; //A + : + \
DriveType: UINT;
end;
var DriveList: array [0..ord('Z') - ord('A')] of DriveStruct;

и

const MAX = 4096;
type
Buffer = record
ClientCommand: array [0..10] of char;
Size: DWORD;
CRC: DWORD;
DataBuffer: array [0..MAX - 1] of byte;
end;

var BufferOut: Buffer;

Требуется в BufferOut.DataBuffer запихать DriveList

Сейчас попробовал вот так:
lstrcp***@B*****.DataBuffer[0],@DriveList[0]); - естественно ничего
не получилось - lstrcpy до первого #0 копирует, а далее обрезает.

Что посоветуете по этому поводу? Может самому процедурку наляпять, но
я же не знаю как Delphi record хранит, т.е. засунуть в
BufferOut.DataBuffer я еще смогу, а вот вытащить обратно - увы.
PS: Пишется данная фигня для обмена по Socket-ам
send(client, BufferOut, sizeof(BufferOut), 0);
Sleep(10);
PPS: Предполагается по этому принципу передавать вообще любые данные,
не только DriveList, но и всевозможную другую чушь (от строк до
файлов), так что если я в корне неправильно передачу данных
понимаю - направьте в нужную сторону.

Ответить   Томилов Александр Sat, 24 Jul 2004 16:02:42 +0500 (#197493)

 

Ответы:

Здравствуйте !

...

Должно быть что то типа memcpy (это в C такое есть, в паскале как то
также должно обзываться).

Вообще можно ведь, наверно, просто вместо BufferOut
сунуть указатель на DriveList, и sizeof указать DriveList - а.
Только надо привести указатель на DriveList к нужному типу.

Имхо, тут операция копирования лишняя - можно написать процедуру
отсылки данных, в которую будет передаваться просто указатель на
данные (на байт, например), и их размер.

--
С уважением, Вахтуров Виктор.
Информационный сайт для программистов http://SoftMaker.com.ru

Номер выпуска : 3438
Возраст листа : 308 (дней)
Количество подписчиков : 445
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/198234
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Mon, 26 Jul 2004 00:41:34 +0400 (#198234)

 

Здоровеньки булы, Victor V. Vakchturov!

26 июля 2004 г., понедельник, 01:41:34 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой ""\Re: "Аналог lstrcpy, только "без
учета #0 (Delphi)"",
в котором сообщалось следующее:

Ну прям с таким названием я не нашел, но хелп выдал такую штуку:

Win32 Equivalents for C Run-Time Functions
...
memcpy CopyMemory
...

Похоже то что надо, спасибо.

Ну это фигня - справлюсь.

Спасиб за идею, тока наверное надо будет не указатель на данные, а
просто структуру изменить мою вот так:
type
Buffer = record
ClientCommand: array [0..10] of char;
Size: DWORD;
CRC: DWORD;
// было DataBuffer: array [0..MAX - 1] of byte;
DataBuffer: Pointer;
end;

В общем надо будет поэкспериментировать.

Ответить   Томилов Александр Mon, 26 Jul 2004 04:26:16 +0500 (#198260)

 

Hello Томилов,

Может так? :
CopyMemor***@B*****.DataBuffer,@DriveList, sizeof(DriveList));

Ответить   Cyberbob Thu, 29 Jul 2004 15:00:46 +0400 (#201242)

 

Здоровеньки булы, Cyberbob!

29 июля 2004 г., четверг, 16:00:46 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой ""\Re: "Аналог lstrcpy, только "без
учета #0 (Delphi)"",
в котором сообщалось следующее:

Эта проблема уже решена, у меня вот такой код:
CopyMemor***@B*****.DataBuffer[0], @DriveList[0], SizeOf(DriveList));

Ответить   Томилов Александр Thu, 29 Jul 2004 19:14:35 +0500 (#201661)

 

Здравствуйте !

Вдогонку :
CopyMemory,вроде, появилась только в Win2000.
Так что протестируй проку еще и в 9x (там CopyMemory может
попросту не быть).

--
С уважением, Вахтуров Виктор.

Номер выпуска : 3448
Возраст листа : 312 (дней)
Количество подписчиков : 444
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/201708
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Fri, 30 Jul 2004 00:51:15 +0400 (#201708)

 

Hello Victor,

Friday, July 30, 2004, 12:51:15 AM, you wrote:

В Дельфях CopyMemory не API-шная ф-ая, а обычная процедура,
которая копирует данные как массивы.

Ответить   Cyberbob Fri, 30 Jul 2004 10:50:39 +0400 (#201969)