Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Экспорт / импорт (dll) функций из класса [D7]


Страницы:   1 2 3 4 5 6 7 8 9 10

parovoZZ ©   (2006-06-27 05:35:00) 

К примеру, запись
exports
TMyClass.myFunc name 'MyFunc';

ошибочна. А как быть?


Пусик   (2006-06-30 18:29:00) [1]

Удалено модератором
Примечание: На [6] недопонятый, на [7] недопонявший. На чем и закончим.


Пусик   (2006-06-30 18:29:00) [2]


> Romkin ©   (30.06.06 12:41) [184]
> Fay ©   (30.06.06 11:38) [182] Скучно :) Воинствующий дилетантизм,
>  как всегда.


Значит, использование ООП только этим исчерпывается?
Скажи, ты используешь обработку исключений в DLL?


Romkin   (2006-06-30 12:41:00) [3]

Fay ©   (30.06.06 11:38) [182] Скучно :) Воинствующий дилетантизм, как всегда.


Romkin   (2006-06-30 12:40:00) [4]

Пусик ©   (29.06.06 21:25) [166] [167] Здесь я вижу первый способ, который я приводил в [129]. Ничего нового :)

Для реализации используется ООП.
<родительский класс-протокол>-MainDLL-->
<Дочерний класс-протокол1>-Prot1DLL
<Дочерний класс-протокол2>-Prot2DLL
       ...
<Дочерний класс-протоколN>-ProtNDLL

Периодически список обрабатываемых протоколов изменяется - одни устаревают и удаляются, новые появляются.


А интересен-то именно способ общения с объектами. Почему интересен? Очень просто: ну есть у нас система плагинов для подключения считывающих устройств. Вроде штрих-считывателей, картридеров и тд.Компонент + dll с определенным классом. Только я четко могу сказать, каким образом сделано: ActiveX. Соответственно, компонент регистрируется в категории, потом подгружается нужный, конфигурируется и идет работа.
Но это, как я уже говорил, не ООП :) Нет класса - общего предка плагина.


Fay   (2006-06-30 11:38:00) [5]

Так... Добрались до сути. Собственно, разговор давно идёт в таком ключе, но форма изложения уже явно изменилась...


Игорь Шевченко   (2006-06-30 11:35:00) [6]

Пусик ©   (30.06.06 11:23) [180]

Вместо того, чтобы флеймить, лучше бы матчасть почитать, право, пользы всяко больше будет.


Пусик   (2006-06-30 11:23:00) [7]


> Игорь Шевченко ©   (30.06.06 10:56) [179]
> Пусик ©   (29.06.06 18:59) [156]
>
> Уважаемое, примите лекарство от хамства, совет такой добрый.
>


Ваши советы приберегите для LVT и прочая. Совет такой добрый.


Игорь Шевченко   (2006-06-30 10:56:00) [8]

Пусик ©   (29.06.06 18:59) [156]

Уважаемое, примите лекарство от хамства, совет такой добрый.


parovoZZ   (2006-06-30 04:22:00) [9]

Удалено модератором


Alx2   (2006-06-29 22:29:00) [10]

> [176] Пусик ©   (29.06.06 22:25)


Я понимаю. Но смысла таки нет.
Если у нас A - предок B, C - его потомки, то в программе (классика) имеет место иерархия A, B(A), C(A).
У тебя, если покдючить обе DLL, получится
в  первой: A1, B1(A1);
во второй: A2, B2(A2).
Причем A1<>A2
То есть имеем две совершенно чуждые друг другу ветви наследования.
Функционально A1=A2, но с точки зрения архитектуры A1<>A2. Смысл дублировать?
Вот примерно это я имел в виду.


Пусик   (2006-06-29 22:25:00) [11]

>Alx2 ©   (29.06.06 22:15) [174]

Итого - три независимых DLL.
Наследование в каждой начинается заново. Смысл?


Ну это же пример, повторяю. Рельный проект будет намного сложнее.
Создан же пример для иллюстрации того, что ООП в DLL - совершенно нормальное дело.


Alx2   (2006-06-29 22:18:00) [12]

Сорри. Две DLL. Но непринципиально это.


Alx2   (2006-06-29 22:15:00) [13]

>Пусик ©   (29.06.06 22:02)

Итого - три независимых DLL.
Наследование в каждой начинается заново. Смысл?


Пусик   (2006-06-29 22:02:00) [14]


> всё равно всё свелось к нескольким версиям одной процедуры.


А шире глянуть? Это всего лишь пример, иллюстрирующий применение ООП в DLL. Реализация реальных классов будет намного сложнее.


> А указатель-то чем не угодил?


А какая разница для иллюстрации?


Fay   (2006-06-29 21:57:00) [15]

2 Пусик
> Чтобы не возникло воросов
А указатель-то чем не угодил?

> Что тебя сподвигло на такое суждение?
Не вижу ваще никакого смысла в создании классов TMainDLLClass-идов - всё равно всё свелось к нескольким версиям одной процедуры.


Пусик   (2006-06-29 21:49:00) [16]


> Приведённый пример слишком хорошо подходит для иллюстрации
> сказанного в [40].


Что тебя сподвигло на такое суждение?


Пусик   (2006-06-29 21:45:00) [17]


> Если не секрет, почему именно DWORD ?


Чтобы не возникло воросов об использовании DLL с хост-программами на другом языке программирования. DWORD - native type


Fay   (2006-06-29 21:41:00) [18]

2 Пусик
Приведённый пример слишком хорошо подходит для иллюстрации сказанного в [40]. Это развод?

З.Ы.
> TProcessFile=function(FilePath: DWORD): BOOL; stdcall;
Если не секрет, почему именно DWORD ?


Пусик   (2006-06-29 21:26:00) [19]

Прошу прощения, отступы(табуляция) обрезались и в последнем посте код не выделила.


Пусик   (2006-06-29 21:25:00) [20]

DLL2:

library FType2;
uses
windows,
SysUtils,
Classes,
uParentClass in '..\uParentClass.pas';

type

TMainDLLClassType2=class(TMainDLLClass)
public
 constructor Create(const FilePath: String);
 function ProcessFile: Boolean; override;

end;

{ TMainDLLClassType2 }

constructor TMainDLLClassType2.Create(const FilePath: String);
begin
inherited Create(FilePath);
end;

function TMainDLLClassType2.ProcessFile: Boolean;
begin
Result := True;
//Здесь обработка файла нужного типа.
end;

function Process(FilePath: DWORD): BOOL; stdcall; export;
var
Obj: TMainDLLClassType2;
begin
Result := False;
try
 Obj := TMainDLLClassType2.Create(PChar(FilePath));
 try
  Result := Obj.ProcessFile;
 finally
  Obj.Free;
 end;
except
end;
end;

exports
Process;
end.


Страницы:   1 2 3 4 5 6 7 8 9 10

Наверх

Титульная страница Поиск, карта сайта Написать письмо