Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Exe + DLL  [new]
antox
Member

Откуда: РФ
Сообщений: 1050
x1ca4064,

И все классы описать в одном unit-е?
17 июн 19, 08:54    [21909473]     Ответить | Цитировать Сообщить модератору
 Re: Exe + DLL  [new]
x1ca4064
Member

Откуда:
Сообщений: 1018
antox
x1ca4064,

И все классы описать в одном unit-е?


Нет, не обязательно:

unit unit1;
interface
type
  TUnitBase=class
  ...
  end;

function CreateAnyClass(Param:....):TUnitBase;

implementation

uses Unit2,Unit3;

function CreateAnyClass(Param:....):TUnitBase;
begin
  Result:=nil;
  if Param.... then Result:= TUnit2.Create
  else if Param... then Result:=TUnit3.Create
  ....
end;
end.

-----------
unit Unit2;
interface
uses Unit1;

type
  TUnit2=class(TUnitBase)
  ...
  end;

implemtation
...
end.

-----------
unit Unit3;
interface
uses Unit1;

type
  TUnit3=class(TUnitBase)
  ...
  end;

implemtation
...
end.
17 июн 19, 10:05    [21909522]     Ответить | Цитировать Сообщить модератору
 Re: Exe + DLL  [new]
antox
Member

Откуда: РФ
Сообщений: 1050
x1ca4064,

Надо осмыслить...

А в любом случае в каждом проекте придется все unit-ы регистрировать (в dpr), никак низя только unit1 цеплять? (Все unit-ы в одной папке, но не в папке проекта).

Что-то даже не помогает прописка папки поиска в настройках проекта... Ругается на

Или игла надо перейти на интерфейсы вместо абстрактных классов (если я правильно понимаю)?
17 июн 19, 10:59    [21909566]     Ответить | Цитировать Сообщить модератору
 Re: Exe + DLL  [new]
x1ca4064
Member

Откуда:
Сообщений: 1018
antox
x1ca4064,
А в любом случае в каждом проекте придется все unit-ы регистрировать (в dpr), никак низя только unit1 цеплять? (Все unit-ы в одной папке, но не в папке проекта).


Нет, не нужно все модули регистрировать: если они указаны в implentation/uses, они автоматом сами подцепятся. Т.е. просто в нужном месте прогарммы указываете uses Unit1,
потом вызываете CreateAnyClass и вернется нужный TUnit.
17 июн 19, 11:08    [21909575]     Ответить | Цитировать Сообщить модератору
 Re: Exe + DLL  [new]
GunSmoker
Member

Откуда:
Сообщений: 3110
antox
Хочу подключать к программам модуль 1 (unit1), в котором есть ф-ции для вызова их из программ, уже этот модуль вызывает ф-ции основного unit2. ф-ции из unit2 недоступны другим модулям, а доступны только unit1 (uses unit2, во всех остальных только uses1).

Проблема в том, что типы описаны в unit2, как можно не описывая их заново в unit1 и не подключая ко всем модулям кроме unit1 еще и unit2 использовать переменные типов, указанных в unit2 в других модулях?

Можно делать так, как показано ниже? Или есть другие решения или лучше вообще избегать такого?

unit2
type
 TMyRec = record
   s:string;
   i:integer;
 end;



unit1
type
 TMR = TMyRec


Так делать можно. Но лучше, если получится вынести декларации в unit3, который будет использоваться unit1 и unit2.
17 июн 19, 14:01    [21909756]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Delphi Ответить