Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
ВнизТип в модуле, компоненте и библиотеке Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.038 c