praeeo wrote:
Code: Select all
procedure TForm1.Button2Click(Sender: TObject);
begin
TDMTestPlugIn.Create.DoMyAction('', '');
end;
 
Стандартная ошибка начинающего работать с интерфейсами - сам наступил на эти же грабли. 

TDMTestPlugIn  - это класс-реализатор интерфейса. Напрямую он создаётся только в программе-хосте (DM) через RegisterPlugIn. Но дело даже не в этом - у TDMTestPlugIn НЕТ метода DoAction, соотетственно система находит нереализованный метод и рапортует об ошибке. Ну а DM потом валится при попытке "убить" созданный объект.
Правильный способ "подключить" плагин к форме выглядит так:
Code: Select all
type
  TSetupForm = class(TForm)
  ...
  private
   FPlugin: TDMTestPlugIn;
   ...
  public
    property Plugin: TDMTestPlugIn read FPlugin write FPlugin;
    ...
  end;
procedure TSetupForm.FormCreate(Sender: TObject);
begin
 FPlugin:=nil; //исходное значение
 ...
end;
   
procedure TSetupForm.FormDestroy(Sender: TObject);
begin
 FPlugin:=nil; //освобождение экземпляра интерфейса (если был выделен)
 ...
end;
Далее в основном тексте плагина пишете что-то вроде
Code: Select all
 var 
  SF: TSetupForm = nil;
 ...
procedure TDMTestPlugIn.PluginConfigure(params: WideString);//вызов окна конфигурации плагина
begin
 if not Assigned(SF) then
  begin
   SF:=TSetupForm.Create(nil);
   SF.Plugin:=Self; //передача в форму экземпляра интерфейса
  end;
 if SF.ShowModal = mrOK then //модальный код кнопки закрытия
  begin
   ...
  end;
  ...
end;
procedure TDMTestPlugIn.BeforeUnload;
begin
 FreeAndNil(SF);
 ...
end;
И тогда в форме можете пользоваться всеми фишками напрямую:
Code: Select all
procedure TSetupForm.Button1Click(Sender: TObject);
begin
 if Assigned(FPlugin) then
   PlugIn.myIDmInterface.DoAction('', '');
end;
praeeo wrote:Как и рекомендовано, модуль ShareMem прописан первым, но наверное это тут не при чем...
Вы не поверите, но модуль ShareMem ВООБЩЕ не нужен. Точнее, он нужен ТОЛЬКО в тех случаях, когда выполняются оба условия:
1) У Вас в dll есть функции с результатом 
String;
2) Вы 
экспортируете эти функции.
Так как плагины никогда не экспортируют функций кроме RegisterPlugIn (ибо незачем), ShareMem можно с чистой совестью удалять из uses.
P.S. Не забудьте добавить в uses формы 
DMPluginIntf.
P.P.S. Код взят из проектов и рабочий, 
я гарантирую это.  
 
 
Незнакомые функции и процедуры смотрите в справке Delphi.
P.P.P.S. Вообще с формой настроек лучше работать асинхронно, не тормозя плагин (и DM). Если интересно, пишите.