Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизРекорды в Delphi и структуры в C++ Найти похожие ветки
← →
Pattern © (2004-04-03 02:42) [0]В C++ есть возможность описания структуры следующим обазом:
struct FileName
А как подобную запись отобразить в Delphi:
{
word FileNameLength;
char FileName[FileNameLength];
};type
Если её написать так:
FileName = record;
FileNameLength: word;
FileName: ???;
end;type
то Delphi ругается, что FileNameLength не объявлена как переменная.
FileName = record;
FileNameLength: word;
FileName: string[FileNameLength];
end;
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c