![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Экспорт / импорт (dll) функций из класса [D7]
parovoZZ © (2006-06-27 05:35:00)
Страницы: 1 2 3 4 5 6 7 8 9 10 >
К примеру, запись
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.