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

Вниз

Тип в модуле, компоненте и библиотеке   Найти похожие ветки 

 
olookin ©   (2004-12-04 22:58) [0]

Давно хотел узнать, можно ли реализовать тип и там, и сям. Так, есть один и тот же (по смыслу) тип в самом модуле проекта, в компоненте, включенном в проект, и в библиотеке, подключенной к проекту. Разумеется, все они разные с точки зрения компилятора. Поэтому в некотором стороннем модуле и возникают трения между этими типами - несовместимость и прочее. Мой вопрос таков - можно ли реализовать все эти типы так, чтобы не было и намека на несовместимость? А то надоело их разводить по разным лавкам...


 
olookin ©   (2004-12-04 23:23) [1]

Попытаюсь сформулировать пример...

Есть модуль из компонента - MacroMath. В нем есть тип TDoubleArray  = array of double. Есть модуль в программе - EqapTypes - в нем также есть TDoubleArray, а кроме того, некий тип TWindowType.

Есть третий модуль, который использует как MacroMath, так и EqapTypes.
Суть мне все равно, откуда он берет TDoubleArray. Важно, чтобы он понимал TWindowType.

Разумеется, если EqapTypes воткнуть в секцию interface, то ругается на несовместимость. Аналогично, если в секцию implementation. Но ведь как то надо получить доступ к типу TWindowType.


 
jack128 ©   (2004-12-04 23:59) [2]

там где нужен этот тип ишешь EqapTypes.TWindowType


 
DrPass ©   (2004-12-04 23:59) [3]


> Разумеется, если EqapTypes воткнуть в секцию interface,
> то ругается на несовместимость

Все равно, непонятно - на какую еще несовместимость он может ругаться? Ты хоть в каждом модуле переопределяй все типы, компилятор к этому совершенно лоялен. Он будет искать тип сначала в текущем модуле, потом в модулях из списка uses начиная с конца. Ты можешь так же явно подсказать, какой ты хочешь использовать - ModuleName.TypeName


 
olookin ©   (2004-12-05 00:01) [4]

[2] jack128 ©   (04.12.04 23:59)

Несовместимость...


 
olookin ©   (2004-12-05 00:03) [5]

[3] DrPass ©   (04.12.04 23:59)

Не исключено, что я просто плохо описываю происходящее...


 
jack128 ©   (2004-12-05 00:08) [6]

дошло что ты имеешь в виду. Самое простое сделать две перегруженные функции.

TWindowType = array of Double;
TDoubleArray = array of Double;

procedure SameFunc(const Arr: TDoubleArray); overload;
begin
... // твой код
end;

procedure SameFunc(const Arr: TWindowType); overload;
type
 PDoubleArray = ^TDoubleArray;
begin
 SameFunc(PDoubleArray(@Arr)^);
end;


 
olookin ©   (2004-12-05 00:09) [7]

[6] jack128 ©   (05.12.04 00:08)

Жаль, но не то я имел в виду...


 
olookin ©   (2004-12-05 00:10) [8]

Сейчас все таки постараюсь привести пример....


 
olookin ©   (2004-12-05 00:17) [9]

unit lookin23;

interface

uses MacroMath, EqapTypes (или EqapTypes, MacroMath);
//в обоих этих модулях есть тип TDoubleArray

type TMainMacro = class(TMacroModule)
    public
      procedure GetValue(Parameter: string; var ValTyp: integer; var AsString: string; var AsNum: double; var As1DArray: TDoubleArray; var As2DArray: TExDoubleArray; var AsColor: TColor; var AsBoolean: boolean); override;
//эта процедура из компонента в модуле MacroMath
    end;

.......
implementation

......

procedure TMainMacro.CreateCollection(Parameter: TStringArray);
var mi: TMenuItem;
begin
 with EqapFileWnd[Length(EqapFileWnd)-1] do begin
 WindowType:=wtCol;  //wtCol - элемент типа TWindowType из EqapTypes
 end;
end;

тут вот ругаемся на несовместимость...
procedure TMainMacro.GetValue(Parameter: string; var ValTyp: integer;          var AsString: string; var AsNum: double; var As1DArray: TDoubleArray;
         var As2DArray: TExDoubleArray; var AsColor: TColor;
         var AsBoolean: boolean);
begin

...... something is taking place here

end;

Замена местоположения EqapTypes не играет никакой роли...

PS Надеюсь этот пример понятен... Надеюсь, так как даже мне он несколько необычен....


 
DrPass ©   (2004-12-05 00:40) [10]

Ага, так речь шла о перекрытии виртуального метода. Тогда раз метод базового класса определен, насколько я понял, в модуле MacroMath, указывай тип оттуда:
procedure GetValue(Parameter: string; var ValTyp: integer; var AsString: string; var AsNum: double; var As1DArray: MacroMath.TDoubleArray; var As2DArray: TExDoubleArray; var AsColor: TColor; var AsBoolean: boolean); override
И точно так же в implementation


 
olookin ©   (2004-12-05 01:02) [11]

[10] DrPass ©   (05.12.04 00:40)

Ого-го, ничего себе! Работает конечно, но догадаться сложно было бы...



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

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

Наверх




Память: 0.49 MB
Время: 0.038 c
3-1100861281
MORA
2004-11-19 13:48
2004.12.19
Транзакции


1-1101820723
Начинающий2
2004-11-30 16:18
2004.12.19
PopupMenu в пограмме без формы.


1-1102435699
yanker
2004-12-07 19:08
2004.12.19
Сохранение экземляра класса в файл


1-1101899498
VasRog
2004-12-01 14:11
2004.12.19
Excel


1-1101908075
gek1
2004-12-01 16:34
2004.12.19
ListBox. Скроллинг по горизонтали