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

标签 delphi vbscript delphi-10.3-rio

我有一个 COM 服务器应用程序,需要将回调链接到后期绑定(bind)的特定事件。

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

关于delphi - 如何在 Delphi COM 服务器应用程序中从 Getref 获取的指针调用 VBscript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61656664/

相关文章:

javascript - 允许单选按钮仅被选中一次以选择其唯一值

delphi - StrToFloat 和谁错了 : Delphi or ASE/SQL Server

multithreading - 互斥锁和线程的问题

javascript - 将日期从 asp 传递到 javascript 函数

delphi - 禁用 FireDAC 上的更新计数检查

Delphi 10.3 Rio - 是否需要初始化内联声明的记录变量?

delphi - 宿主组件创建的自定义子组件未由设计器自动命名

delphi - 如何通过鼠标单击将另一个应用程序的窗口句柄传递给 Delphi

delphi - 使用嵌入的 dll 作为资源启动程序时出现问题

.net - svn hooks 会因为 .NET 的原因而读取 vbs、ruby 等脚本吗?