Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

несоответствие типов


Gu ©   (2011-12-17 01:26:00) 

в types.pas и далее в windows.pas объявлен тип

 _FILETIME = record
   dwLowDateTime: DWORD;
   dwHighDateTime: DWORD;
 end;
 {$EXTERNALSYM _FILETIME} (*)

в проге пишу

uses windows..

Type
 _FILETIMEA = record
   dwLowDateTime: DWORD;
   dwHighDateTime: DWORD;
 end;

Function CompareFileTimeA(t1,t2:_FILETIMEA):Integer;
begin
Result:=CompareFileTime(t1,t2); // тут ругается на несоответствие типов t1 и t2 (windows._FileTime и моймодуль._FileTimeA)
end;

почему? ведь типы одинаковые. и для чего в windows.pas вот это (*)


KilkennyCat   (2011-12-17 16:20:00) [1]


> Gu   (17.12.11 06:56) [13]
> вроде бы форум кк раз для этого и создан? чтобы
> проблемы решать, в особенности эта ветка.

чтобы добровольно помогатьрешать. почувствуй разницу.
но ты всегда можешь подать в суд, если что не так. это твое гражданское право.

>  вы поймите - людям ответы нужны, а не поучения

не обобщай, то, что тебе нужно - мне, например, не нужно.


oxffff   (2011-12-17 15:23:00) [2]

На SO не совсем корректный ответ.

Есть понятие структурной и именной эквивалентности типов.
Для записей в Delphi используется именная эквивалентность типов.


Плохиш   (2011-12-17 13:24:00) [3]


> Rouse_ ©   (17.12.11 02:18) [7]
> Справку стало быть не читаешь совсем?

О, ты только это понял.


Ega23   (2011-12-17 09:43:00) [4]

А по сабжу - CompareMem тебе в помощ. Но вопрос из ряда извращений, да-с.


Ega23   (2011-12-17 09:40:00) [5]


> вы поймите - людям ответы нужны, а не поучения


Тебе никто ничего не должен.


MBo   (2011-12-17 08:43:00) [6]

На SO тебе прочитали справку. Вслух, с выражением.


Gu   (2011-12-17 06:56:00) [7]


> Но это твоя проблема.

конечно моя, вроде бы форум кк раз для этого и создан? чтобы проблемы решать, в особенности эта ветка.

уже ответили через 10 минут после того, как вопрос задал, тут: http://stackoverflow.com/questions/8540780/discrepancy-of-types

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


Германн   (2011-12-17 04:11:00) [8]


> а проспаться сам можешь.
>

Проспаться я и так просплюсь. :)
А вот
"<Цитата>

Gu   (17.12.11 02:07) [6]

просто не понятно, почему если пишу"
это уже проблема! Но это твоя проблема.
Может всё-таки почитаешь учебники?


Rouse_   (2011-12-17 02:45:00) [9]

Больно слышать, но все-же прочитай справку...


Gu   (2011-12-17 02:43:00) [10]

и мне


Rouse_   (2011-12-17 02:33:00) [11]


> Gu   (17.12.11 02:22) [8]
> Больше нечего ответить?

Хм, в такой постановке вопроса, вероятнее всего нет...


Gu   (2011-12-17 02:22:00) [12]


> Справку стало быть не читаешь совсем?

Больше нечего ответить?


Rouse_   (2011-12-17 02:18:00) [13]

Справку стало быть не читаешь совсем?


Gu   (2011-12-17 02:07:00) [14]

просто не понятно, почему если пишу

Type
myInt=Integer;
myNewInt=-2147483648..2147483647;

var a:myint;b:myNewInt;

begin
a:=b;
end;

все нормльно

а если

uses windows;
type
 _FILETIMEA = record
   dwLowDateTime: DWORD;
   dwHighDateTime: DWORD;
 end;

var x:_FILETIMEA;y:_FILETIME;
begin
x:=y;
end;

вызовет ошибку компиляции.
а проспаться сам можешь.


Германн   (2011-12-17 02:02:00) [15]


> Gu   (17.12.11 01:56) [3]
>
>
> > Rouse_
>
> по вашему выходит, что все типы надо в каждом модуле объявлять


> > А зачем это пишешь в своей программе?
> не относится к вопросу
>

Проспись сначала. А завтра может поймёшь где ты тупишь.
Хотя это вряд ли. Не читая учебников - очень трудно написать грамотный код.


Rouse_   (2011-12-17 01:59:00) [16]


>  Gu   (17.12.11 01:56) [3]
> по вашему выходит, что все типы надо в каждом модуле объявлять

Наоборот не нужно, сие есть зело вредно, тебе об этом даже компилер в ошибке написал о несоответствии типов.


Gu   (2011-12-17 01:56:00) [17]


> Rouse_

по вашему выходит, что все типы надо в каждом модуле объявлять. например Dword в windows.pas объявлен как DWORD = Types.DWORD;, однако windows.pas копилится нормально (не кричит что все dword в дальнейших типах и процедурах должны быть types.dword) и если я пишу

type
 DWORD = Types.DWORD;
 _FILETIME = record
   dwLowDateTime: DWORD;
   dwHighDateTime: DWORD;
 end;

не ругается, что dwLowDateTime: DWORD; <> windows.dword

> А зачем это пишешь в своей программе?
не относится к вопросу


Германн   (2011-12-17 01:40:00) [18]


> в проге пишу
>
> uses windows..
>
> Type
>  _FILETIMEA = record
>    dwLowDateTime: DWORD;
>    dwHighDateTime: DWORD;
>  end;
>

А зачем это пишешь в своей программе?


Rouse_   (2011-12-17 01:37:00) [19]


> ведь типы одинаковые.

типы разные, один объявлен в модуле windows, второй у тебя, названия у них одинаковые - это да


Наверх

Титульная страница Поиск, карта сайта Написать письмо