![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
создание и подключение плагина [D7, D2005, XP, 2003]
Std © (2006-03-22 23:32:00)Доброго времени суток. подскажите пожалуйста(кусочком кода) как создать програму что бы можна было добавлять к ней плагины. Ситуация: в папке с прогой есть папка plugin в нее добавляется дллка. и при выполнении проги когда пользователь нажимает кнопку открыть файл в окне диалога появляется список файлов для открытия с только что добавленой дллки. например сама прога умее открывать только *.txt файлы а после добавления плагина она умеет открывать еще и *.bmp файлы.
Заранее благодарен
Старик (2006-03-25 08:34:00) [1]Сорри, забыл:
type
TGetNameFunc = function : PChar;
var
Form1: TForm1;
IsName : TGetNameFunc;
implementation
{$R *.dfm}
...
И далее по списку
Старик (2006-03-25 08:33:00) [2]Проверить папку на наличие DLL-файлов. Результат - найденные DLL в списке класса TStringList
procedure TForm1.ScanForModules(var Modules : TStringList);
var sr : TSearchRec;
FileAttrs : integer;
begin
FileAttrs := faAnyFile;
if FindFirst('Modules\*.dll', FileAttrs, sr) = 0 then
repeat
if (sr.Attr and FileAttrs) = sr.Attr then Modules.Add(sr.Name);
until FindNext(sr) <> 0;
FindClose(sr);
end;
Определяем, какие из найденных DLL являются "нашими":
procedure TForm1.Button2Click(Sender: TObject);
var i : integer;
ModuleHandle : integer;
begin
for i := 0 to ListBox1.Count - 1 do begin
ModuleHandle := LoadLibrary(PChar('Modules\' + ListBox1.Items.Strings[i]));
if ModuleHandle >= 32 then begin
IsName := GetProcAddress(ModuleHandle, 'IsSampleModuleName');
if assigned(IsName) then ListBox2.Items.Add(string(IsName));
FreeLibrary(ModuleHandle);
end;
end;
end;
Вот и все. Весь прикол в том, чтобы у наших модулей была функция-идентификатор. Во всех создаваемых тобой модулях она обязательно должна быть и всегда с одинаковым именем.
Kolan (2006-03-24 23:17:00) [3]Andy BitOff © (23.03.06 22:27) [7]
Потомучто Miss Type, а ШО? :).
Amoeba (2006-03-24 10:16:00) [4]Несколько статей об использовании плагинов найдешь на http://www.delphikingdom.com
Andy BitOff (2006-03-23 22:27:00) [5]Kolan © (23.03.06 15:59) [6]
А чего же с маленькой буквы? =)
Kolan (2006-03-23 15:59:00) [6]Тайскера и Пачеко. Про Dll. Есть у Анатолия подгорецкого на сайте.
Std (2006-03-23 12:47:00) [7]ТОесть нада в папке просмотреть все дллки, и чтобы у каждой дллки были одинаковые названия функций?
З.Ы. а какую литературу почитать?
Der Nechk@ssoff (2006-03-23 08:45:00) [8]У меня схожая проблема.
> TUser © (23.03.06 08:39) [3]
Как реализовать сканирование папки на наличие длл-ок?
TUser (2006-03-23 08:39:00) [9]Надо реализовать
1. Придумать, какие функции должна экспортировать dll, реализующая плагин
2. Реализовать сканировние dll ок в требуемой папке. Те, кто экспортирует, что требуется, - подключать. См. LoadLibraray, GetProcAddress.
EvS (2006-03-23 08:19:00) [10]>подскажите пожалуйста(кусочком кода)
Сначала тебе надо не кусочком кода, а литературой на эту тему поинтересоваться
Der Nechk@ssoff (2006-03-23 07:34:00) [11]Интерсный вопрос-жаль помочь не могу...