Главная страница
    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.47 MB
Время: 0.03 c
14-1080730533
raymond
2004-03-31 14:55
2004.04.25
Просьба ногами не бить! (демка)


9-1066728269
Гарри Поттер
2003-10-21 13:24
2004.04.25
"OpenGl Графика в проектах Дельфи" М.Краснов


3-1080536840
Olegka
2004-03-29 09:07
2004.04.25
надо в инсталл проги вставить инсталл Firebird.


14-1080684596
ИМХО
2004-03-31 02:09
2004.04.25
На самом деле, двоичное исчисление придумал АС Пушкин


4-1077969851
Vlad25
2004-02-28 15:04
2004.04.25
GetKeyboardState





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский