【问题标题】:How to use ScriptControl & load Unicode res file?如何使用 ScriptControl 和加载 Unicode res 文件?
【发布时间】:2015-02-18 00:04:25
【问题描述】:

如何将此 VB6 代码转换为 Delphi?

strConv(a, vbUnicode)

Private cScript As New ScriptControl
cScript.Language = "Javascript"
cScript.Reset
cScript.AddCode StrConv(LoadResData(101, "RSADATA"), vbUnicode)
cScript.Run("createRsaKey", data1 , data2)

【问题讨论】:

  • 首先你需要决定如何在你的Delphi程序中执行JavaScript?你的意图是什么?
  • 也许最简单的方法是清除 JavaScript 并在 Delphi 中编码。不要觉得你必须逐字翻译每一行代码。随意选择更好的方法来解决问题。

标签: delphi vb6 code-conversion scriptcontrol


【解决方案1】:

首先:我同意@DavidHeffernan:请(非常请)寻找一种在 Delphi 中执行逻辑的方法。

按照以下步骤操作:

  • 找到导入类型库菜单功能,根据 Delphi 版本,它可能位于不同的顶部菜单(通常是组件或工具)下,或者具有不同的名称(导入 ActiveX、导入 COM 对象...)
  • 从已知类型库列表中,选择列表中最高版本的“Microsoft Script Control”(但很可能仍然只是 1.0 版)
  • 创建包装单元

然后使用TScriptControl 对象的实例,可能是这样的:

var
  sc:TScriptControl;
  sa:PSafeArray;
  code:WideString;
  rs:TResourceStream;
begin
  rs:=TResourceStream.Create(HInstance,'RSADATA',MakeIntResource(101));
  try
    SetLength(code,rs.Size div 2);
    rs.Read(PWideChar(code)^,rs.Size);
  finally
    rs.Free;
  end;

  sc:=TScriptControl.Create(nil);
  try
    sc.Language:='Javascript';
    sc.Reset;
    sc.AddCode(code);
    sa:=PSafeArray(TVarData(VarArrayOf([data1,data2])).VArray);
    sc.Run('createRsaKey',sa);
  finally
    sc.Free;
  end;
end;

【讨论】:

  • 这是问题的答案,但人们不禁觉得调用远程 js 不是创建 RSA 密钥的最佳方式
  • 如果询问者没有将 js 链接到可执行文件,我一点也不感到惊讶。
  • 上面写着 LoadResData 这就是 TResourceStream 所做的,我假设提问者知道 .rc.res 文件。
  • @DavidHeffernan:你碰巧知道PSafeArray(TVarData(VarArrayOf 构造的简写吗?我搜索了 VarArrayToSafeArray 但找不到任何
  • 我没有想到。变种不是我的事。
猜你喜欢
  • 2012-11-02
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 2017-12-09
  • 1970-01-01
相关资源
最近更新 更多