Как вызвать функцию VBscript из указателя, полученного Getref в приложении Delphi COM-сервера - PullRequest
3 голосов
/ 07 мая 2020

У меня есть приложение COM-сервера, и мне нужно связать обратные вызовы с определенными c событиями с поздней привязкой.

Мой тестовый сценарий VB выглядит следующим образом:

Sub Main
  dim Frm
  Set Frm=NewForm("Form1")
  Frm.OnActivate = getRef("Frm_OnActivate")
  a= Frm.Showmodal
end Sub

sub Frm_OnActivate
  MsgBox("Activate")
end Sub

My com на сервере есть свойство onActivate типа OleVariant.

function TALform.Get_OnActivate: OleVariant;
begin
  result:=FonActivate;
end;

procedure TALform.Set_OnActivate(Value: OleVariant);
begin
  FonActivate:=Value;
  Fform.OnActivate:=OnactivateEx
end;

Мой вопрос: получив это значение, как мне вызвать функцию VBscript из значения, хранящегося в Olevariant (которое отладчик показывает как типа VarDispatch)?

1 Ответ

2 голосов
/ 07 мая 2020

Попробуйте что-то вроде этого:

var
    Param: TDispParams;
    MethodResult: OleVariant;
    Result: HRESULT;
begin
    Param.rgvarg := nil;
    Param.rgdispidNamedArgs := nil;
    Param.cArgs := 0;
    Param.cNamedArgs := 0;
    Result := IDispatch(FonActivate).Invoke(0, GUID_NULL, SysLocale.DefaultLCID, DISPATCH_METHOD, Param, @MethodResult, nil, nil);
end;
...