Плагины ДМ

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

Moderators: Korney San, marcipan

rus_999
Бывалый
Posts: 16
Joined: 20 Dec 2008, 14:06 Sat
Contact:

Плагины ДМ

Post by rus_999 »

Народ, а подскажите как плагины ДМ в своей программе можно подключить и использовать (т.е. вызывать функции и процедуры)?! Вымотался уже, чет ниче не получается! :(
Заранее спасибо!
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

Код подключения покажи, да?
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
rus_999
Бывалый
Posts: 16
Joined: 20 Dec 2008, 14:06 Sat
Contact:

Post by rus_999 »

А че там показывать то? Ниче пока не получается. Мне нужно подключить плагин, написаный для ДМ, к своей программе и вызвать функции типа GetName и т.д.
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

Ну так LoadLibrary, переменная типа

Code: Select all

TRegisterPlugIn = function: IDMPlugIn; stdcall;
GetProcAddress ну и дальше как положено.

Что непонятно-то?
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
rus_999
Бывалый
Posts: 16
Joined: 20 Dec 2008, 14:06 Sat
Contact:

Post by rus_999 »

Делал так, но ерунда какая то получается. Ошибки летят разные постояно типа RuntimeError когда завершаем приложение

type
TDMPlugin = function : IDMPlugIn; stdcall;

var
hndl : thandle;
PlugIn : TDMPlugin;
plug : IDMPlugin;
dllname: pchar;
begin
dllname:=pchar(extractfilepath(paramstr(0))+'dll\dmtest_plugin.dll');
hndl:=loadlibrary(dllname);
if hndl<>0 then
begin
PlugIn:=getprocaddress(hndl,'RegisterPlugIn');
if plugin<>nil then
begin
plug:=plugin;
showmessage(plug.GetName);
end;
end;
end;
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

А где ж им не лететь, когда надо
@PlugIn:=getprocaddress(hndl,'RegisterPlugIn');
if plugin<>nil then
begin
plug:=plugin();
ну и далее по тексту.
Курите присваивание указателей.
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
rus_999
Бывалый
Posts: 16
Joined: 20 Dec 2008, 14:06 Sat
Contact:

Post by rus_999 »

Korney San wrote:А где ж им не лететь, когда надо
@PlugIn:=getprocaddress(hndl,'RegisterPlugIn');
if plugin<>nil then
begin
plug:=plugin();
ну и далее по тексту.
Курите присваивание указателей.
Ниче не изменило, результат тот же!
И еще вопрос как можно из длл вызвать функцию exe, пожалуйста поподробнее.
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

rus_999 wrote:Ниче не изменило, результат тот же!
Вылеты на выходе? А FreeLibrary Пушкин писать должен? DLL это Вам не просто переменная.
rus_999 wrote: И еще вопрос как можно из длл вызвать функцию exe, пожалуйста поподробнее.
Передать ссылку на функцию exe в DLL. Как это делает DM.
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
rus_999
Бывалый
Posts: 16
Joined: 20 Dec 2008, 14:06 Sat
Contact:

Post by rus_999 »

Korney San wrote:Передать ссылку на функцию exe в DLL. Как это делает DM.
Можно текстом и поподробнее, очень нужно.
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

F1 ! F1 ! F1 !

На примере плагиновской EventRaised:

Code: Select all

type
TActionFunc = function (action, parameters: WideString): WideString of object;

const
 actConnect = 'Connect';

type
  TThunkSetupForm = class(TForm)
  ...
  public
    { Public declarations }
    DoPluginAction: TActionFunc;
  ...
  end;

procedure TThunkSetupForm.FormCreate(Sender: TObject);
begin
 ...
 DoPluginAction:=nil;
 ...
end;

procedure TThunkSetupForm.SB2Click(Sender: TObject);
begin
 ...
     if Assigned(DoPluginAction) then
      begin
       DoPluginAction(actDisconnect, FPlugins[i].FileName);
       ...
      end;
 ...
end;

procedure TDMTestPlugIn.PluginConfigure(params: WideString);//вызов окна конфигурации плагина
begin
 CF:=TThunkSetupForm.Create(nil);
 ...
 CF.DoPluginAction:=EventRaised;
 CF.ShowModal;
 ...
 CF.Free;
end;
Sapienti sat.
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
rus_999
Бывалый
Posts: 16
Joined: 20 Dec 2008, 14:06 Sat
Contact:

Post by rus_999 »

Чет не понял, че куда добавлять. Какая часть в программе, какая в библиотеке? :(
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

rus_999 wrote:Чет не понял, че куда добавлять. Какая часть в программе, какая в библиотеке? :(
Начнём сначала. Вы хотите подключить плагин DM к своей программе и вызвать функцию этой программы из плагина?
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
rus_999
Бывалый
Posts: 16
Joined: 20 Dec 2008, 14:06 Sat
Contact:

Post by rus_999 »

Korney San wrote:
rus_999 wrote:Чет не понял, че куда добавлять. Какая часть в программе, какая в библиотеке? :(
Начнём сначала. Вы хотите подключить плагин DM к своей программе и вызвать функцию этой программы из плагина?
Да. Чтоб можно было вызвать из программы функцию плагина, которая после завершения своей работы вызывает процедуру из программы.
Реакции пытаюсь добиться, как при вызове в плагине функции DoAction/
Richi Y.K.
Posts: 2
Joined: 28 Jan 2009, 11:33 Wed
Contact:

Post by Richi Y.K. »

Есть предложение по плагину, не знал где писать, решил здесь.

Вобщем такая ситуация. У меня очень низкая скорость инета. Более того, она сильно колеблется. В результате закачка в ДМ подолгу виснет на нулевой скорости. Лечится по истечении минут 10-15 , или если нажать паузу-продолжить.
И того, подсчитал свою среднюю скорость закачки файлов - 0,5 кб/с. Если нажимать паузу-продолжить, то среднюю скорость можно поднять до 10 кб/с, что, согласитесь, значительно лучше.
Вот и хотелось бы увидеть аткой плагин, который запросы отправлял автоматически (невзирая на то закачивается ли что-то там, или нет) каждые 6-8 (или хотя бы 10) секунд. Так сказать специально для "инвалидного" инета. :)

Скажите, сложно ли такое реализовать?
marcipan
Гуру
Posts: 1400
Joined: 11 Jun 2005, 3:55 Sat
Location: Санкт-Петербург

Post by marcipan »

Посмотрите здесь, два плагина точно подойдут под Ваши условия.
Post Reply