如何在 Delphi COM 服务器应用程序中从 Getref 获取的指针调用 VBscript 函数

How to invoke a VBscript function from pointer obtained by Getref in a Delphi COM server app

我有一个 COM 服务器应用程序,需要 link 回调到特定的延迟绑定事件。

我的测试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

我的 com 服务器有 OleVariant 类型的 onActivate 属性。

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

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

我的问题是,在获得该值后,如何从存储在 Olevariant(调试器显示为 VarDispatch 类型)中的值调用 VBscript 函数?

尝试这样的事情:

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;