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

Вниз

Рекорды в Delphi и структуры в C++   Найти похожие ветки 

 
Pattern ©   (2004-04-03 02:42) [0]

В C++ есть возможность описания структуры следующим обазом:struct FileName
{
 word FileNameLength;
 char FileName[FileNameLength];
};
А как подобную запись отобразить в Delphi:type
 FileName = record;
   FileNameLength: word;
   FileName: ???;
 end;
Если её написать так:type
 FileName = record;
   FileNameLength: word;
   FileName: string[FileNameLength];
 end;
то Delphi ругается, что FileNameLength не объявлена как переменная.


 
kaif ©   (2004-04-03 03:00) [1]

А размер этой структуры в C будет зависеть от данных что ли? Как это потом будем юзать? Сначала резервируем неизвестно сколько памяти под структуру, а потом заливаем ее именно тем количеством байт, которое заранее умудрились угадать?
 Я что-то не врубаюсь... Хотя в C всякое может быть...


 
Pattern ©   (2004-04-03 03:44) [2]

Первый парамерт считывает размер занятый FileName. Во вторую переменную заносится уже само имя. Тут то всё понятно. А как это отбразить в Delphi?


 
dmk ©   (2004-04-03 04:03) [3]

type MyFileName = record
  FNameLength: word;
  FName: String;
 end;

var
 FRec: MyFileName;
 Str: String;

begin

 Str := "qwerty.io";
 FRec.FNameLength := Length(Str);

 With FRec do
   begin
     SetLength(FName, FNameLength);
     FName := Str;
   end;

   InfoMessage(Str);
   SetLength(FRec.FName, 0);


 
Pattern ©   (2004-04-03 04:20) [4]

Спасибо dmk! Это именно то что нужно!


 
Юрий Зотов ©   (2004-04-03 07:08) [5]

> Pattern ©   (03.04.04 04:20) [4]

Даже более того - поскольку строки в Delphi имеют автоматически управляемое время жизни и поскольку  длина строки автоматически устанавливается при присваивании ей значения - так вот, в силу этого хранить в записи длину строки не имеет никакого смысла, а тогда пропадает смысл в самой записи и от нее остается только одна строка.


 
S@shka ©   (2004-04-03 13:55) [6]

DELPHI вообщем рулит :)


 
Yozh_Programmer ©   (2004-04-03 16:22) [7]


> struct FileName
> {
>  word FileNameLength;
>  char FileName[FileNameLength];
> };

странно, а твой код на C++ пашет???


> S@shka ©   (03.04.04 13:55) [6]
> DELPHI вообщем рулит :)

ну не знаю, в С++ есть тип string, и в MFC есть CString - вот тебе типы, которын пашут не менее рулезно, ГЫГЫГЫ!!!


 
Verg ©   (2004-04-03 17:35) [8]


> Pattern ©   (03.04.04 02:42)  
> В C++ есть возможность описания структуры следующим обазом:struct
> FileName
> {
>  word FileNameLength;
>  char FileName[FileNameLength];
> };


Нет, нет там такого...


 
silya ©   (2004-04-03 22:02) [9]

2 Сашка
Не только Делфер в нашей жизни рулит %)
но есть ещё языки не хуже а кое где и лучше Делфера


 
Pattern ©   (2004-04-06 02:57) [10]

2Verg -> Очень даже может быть. Я не сильный знаток С++. Но подобное описание я не сам придумал, а "подсмотрел" где-то на страницах инета. Так что получается, за что купил, за то продал...


 
Suntechnic ©   (2004-04-06 04:22) [11]

>Pattern ©
Написав на С
struct FileName
{
word FileNameLength;
char FileName[FileNameLength];
};

получишь два больших матюка от компилятора.  Первый конечно быстро исправишь (имя структуры совпадает с именем поля), а вот второй... В С нельзя объявить статический массив переменной длины. В выражении char FileName[FileNameLength]; FileNameLength- обязана быть константа. Так что ты скорее всего видел что-то типа
struct FileName
{
word FileNameLength;
char FileNameStr[MAX_PATH];
};

Где MAX_PATH это константа описанная где-то в недрах windows.h

Так вот, не удивляйся потом, если как-нибудь передав в сишную dll с прототипом ф-ции принимающей в качестве параметра подобную структуру, значение описанное в Delphi как dmk ©   (03.04.04 04:03) [3], ты на выходе получишь AV.



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.035 c
14-1081233338
Думкин
2004-04-06 10:35
2004.04.25
С днем рождения! 6 апреля.


1-1081155133
MegaVolt
2004-04-05 12:52
2004.04.25
Простенький архиватор.


9-1067445956
X_Michael
2003-10-29 19:45
2004.04.25
Всплывающее окно удаленного соединения


7-1078108920
Ultr
2004-03-01 05:42
2004.04.25
как определить тип носителя (жесткий, cd-rom, съмный)


1-1081664329
Franzy
2004-04-11 10:18
2004.04.25
Copyfile /help