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

Вниз

Нашел одну вещь в Delphi   Найти похожие ветки 

 
iZEN ©   (2004-11-14 02:41) [40]

Напомните, пожалуйста, компилятор TurboPascal/Delphi отлавливает такую ситуацию:

unit Module1;

interface

procedure TestString(var s: String);

implementation

procedure TestString(var s: String);
begin
 s := s + " in Module1";
end;

end.

И ещё один модуль:

unit Module2;

interface

procedure TestString(var s: String);

implementation

procedure TestString(var s: String);
begin
 s := s + " in Module2";
end;

end.

Программа:

program DemoTest;

uses Module1, Module2;

var
 s: String;
begin
 s := "Test String";
 TestString(s);(* Module1.TestString(s) или Module2.TestString(s)??? *)
end.


 
iZEN ©   (2004-11-14 02:49) [41]

Проверил тест (iZEN ©   (14.11.04 02:41) [40]) только что.

Delphi7 НЕ ОТЛАВЛИВАЕТ И КОМПИЛИРУЕТ БЕЗ ПРЕДУПРЕЖДЕНИЙ!!!

Даже не зависит от порядка объявления:
uses Module1, Module2;
и
uses Module2, Module1;
процедура TestString всегда вызывается из Module1.

Вот такая неоднозначность.


 
iZEN ©   (2004-11-14 02:58) [42]

Причём процедура какого модуля вызовется, зависит от очерёдности создания модулей в проекте Delphi, а не в объявлении uses, что не есть хорошо в плане определения языка. Выходит, что среда Delphi не слабо влияет на язык.


 
iZEN ©   (2004-11-14 03:01) [43]

(iZEN ©   (14.11.04 02:58) [42])
Какие-то глюки пошли, всё равно вызывается Module1.TestString.

Я ОФИГЕВАЮ.


 
GuAV ©   (2004-11-14 03:07) [44]

2 iZEN

А может это потому что они перечисленны и в dpr и в модуле ? и где-то перестваил Module2 <-> Module1 а где-то нет ?


 
iZEN ©   (2004-11-14 03:15) [45]

uses Module1, Module2;
BuildAll, запускаю: Test String in Module1.
Вроде отлично.

Исключаю из проекта Modul1, затираю исходники Modul1, уничтожаю все dcu, убираю в uses ссылку на него: uses Module2;
Project -> BuildAll -> Run: Test String in Module2.
Вроде отлично.

File -> New -> Unit -> редактирую -> SaveAs "Module1"
Добавляю в uses ссылку: uses Module1, Module2;
BuildAll, запускаю: Test String in Module2.
Глюк? (1)

Комментирую в uses ссылку: uses Module1;//, Module2;
Project -> BuildAll -> Run: Test String in Module1.
Отлично.

Меняю местами в uses ссылки: uses Module2, Module1;
Project -> BuildAll -> Run: Test String in Module1.
Глюк? (2)

Что это? Где логика между Глюками (1) и (2)? Лично я не нахожу причин от чего зависит поведение программы.


 
iZEN ©   (2004-11-14 03:18) [46]

to GuAV ©   (14.11.04 03:07) [44]
АБСОЛЮТНО нет связи между порядком перечисления и выполнением.


 
iZEN ©   (2004-11-14 03:34) [47]

В консольном приложении есть связь между порядком перечисления в uses и выполнением: выполняется процедура, объявленная в модуле, стоящим последним в списке uses.


 
iZEN ©   (2004-11-14 03:50) [48]

В оконном приложении так же.

Так что прошу прощения за "глюки".


 
Piter ©   (2004-11-14 14:47) [49]

Игорь Шевченко ©   (14.11.04 1:20) [27]
> И ?
> IMHO это сюда не при чём. TestFunc(string("test")) всё равно
> вызовет PChar функцию.

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


Игорь, ну а вы опять не верите? Проверено, проверено. Вызывается PChar версия функции...

Игорь Шевченко ©   (14.11.04 1:23) [29]
делается ли в случае PChar(StringValue) уникальный экземпляз строки.


ух ты, странно что не помните. Не делается, конечно. PChar начинает указывать на первый символ AnsiString - @s[1]
А вот при обратном преобразовании конечно же создается копия, ибо AnsiString никак не может указывать просто на какой-то символ, должна быть еще структура служебная (ну там счетчик ссылок, длина, размер структуры...)



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

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

Наверх




Память: 0.55 MB
Время: 0.048 c
1-1100277025
heady
2004-11-12 19:30
2004.11.28
строка с разделителями


6-1095423432
Uran
2004-09-17 16:17
2004.11.28
Как зарегестрировать ActiveX Server на клиенте


3-1098990128
Vova
2004-10-28 23:02
2004.11.28
Query1.FieldCount всегда возвращает одно значение


4-1097814067
petvv
2004-10-15 08:21
2004.11.28
Просмотреть запущенные процессы, найти нужный и убить его


8-1093886408
Рыба
2004-08-30 21:20
2004.11.28
Чтение файлов курсоров в растр.