【问题标题】:Send Delphi record in PSafeArray在 PSafeArray 中发送 Delphi 记录
【发布时间】:2013-07-28 15:28:08
【问题描述】:

我正在尝试在 Delphi 应用程序中使用 ActiveX 对象。我必须使用的一种方法要求我发送以下结构:

SCategoryMember = packed record
    terminal: WideString;
    semanticStatements: WideString;
    symbolAttributeDefinitions: WideString;
end;

通过这个方法调用:

procedure SetCategoryMembers(var a_category: SGrammarSymbol; 
  a_mode: SetCategoryMode;  
  var a_members: PSafeArray); safecall;

SCategoryMember 结构应作为a_members 参数中的元素发送。

知道如何将数据包记录转换为PSafeArray 中的元素吗?

【问题讨论】:

  • 请参阅this post 以获取可能有帮助的链接。

标签: delphi


【解决方案1】:

我想您希望将一组记录发送到 ActiveX 方法。

AFAIK,Delphi 不支持直接封送 COM 记录类型(即内部 VT_RECORD 类型)。不过你可以试试create a safe array pointing to the data。但是你的结构有WideString 成员这一事实可能是一个额外的问题。有点难,不过feasible, if you take a look at this answer

对于此类结构,我们通常使用 COM 来定义一个对象而不是记录(例如,在 C# 中使用 class 而不是 struct)。而不是一个数组,我们定义了一个List<>。然后将其作为 Delphi 接口导入到相应的..._tlb.pas 中,并包含所有需要的成员。无需调整 COM 内部结构。如果您可以更改 ActiveX 代码,我建议您这样做。

【讨论】:

  • 为什么要匿名投票?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
相关资源
最近更新 更多