0

我正在尝试在 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参数中的元素发送。

关于如何将数据包记录转换为 a 中的元素的任何想法PSafeArray

4

1 回答 1

0

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

AFAIK,Delphi 不支持直接封送 COM 记录类型(即内部VT_RECORD类型)。但是您可以尝试创建一个指向数据的安全数组。但是你的结构有成员这一事实WideString可能是一个额外的问题。如果您看一下这个答案,这有点困难,但可行。

对于这种结构,我们通常用 COM 做的是定义一个对象而不是记录(例如,在 C#中用 aclass代替 a )。struct而不是一个数组,我们定义一个List<>. 然后将其作为 Delphi 接口..._tlb.pas与所有需要的成员相对应地导入。无需调整 COM 内部结构。如果您可以更改 ActiveX 代码,我建议您采用这种方式。

于 2013-07-28T07:16:24.010 回答