Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-1099323488
Alexey_Trofimov
2004-11-01 18:38
2004.12.19
Отключить мышь или чтоб его небыло видно


4-1099560670
++MASTER++
2004-11-04 12:31
2004.12.19
Отключение всех процессов


4-1099514502
dimaxx
2004-11-03 23:41
2004.12.19
Трабл с чтением файла в библиотеке


1-1101946013
Змей
2004-12-02 03:06
2004.12.19
listview


4-1099284762
Rentgen
2004-11-01 07:52
2004.12.19
Прожиг CD-R, CD-RW





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский