【问题标题】:Send an array of strings from vfp to a dll created on delphi将字符串数组从 vfp 发送到在 delphi 上创建的 dll
【发布时间】:2013-12-12 12:58:58
【问题描述】:

我在 Delphi 中创建了一个 DLL,它必须从其他参数中接收来自 Visual Fox Pro 的字符串数组。

我尝试了不同的方法来发送数据,但通常我得到的是“声明 DLL 调用导致异常”,我不确定问题是否是我在 VFP 上发送的变量类型或我在 Delphi 上收到的类型。

我们已经尝试从 VFP 发送一个字符串数组

Local arString[3]
arString[1] = 'Text1'
arString[2] = 'Text2'
arString[3] = 'Text3'

Declare integer callDLL in (dllfile) string, string, string
CallDLL('firstvar', 'secondvar', arString)

在德尔福上:

type Str: Array[1..3] of string;
function CallDLL(firstvar, secondvar: PAnsiChar; S: Str):Integer; stdcall ;
begin
ShowMessage(S[0]) ;
...
end;
exports CallDLL ;    

在我添加字符串数组之前,DLL 工作正常,所以不是其他参数的整体构造。

知道我做错了什么吗?

谢谢, TZ

【问题讨论】:

  • It seems 没有可用的数组类型参数,因此您很可能需要在 FoxPro 端连接这些字符串并在 Delphi 端解析它们。此外,您已声明该函数将返回一个整数,而在 Delphi 端您不返回任何内容。

标签: arrays delphi dll visual-foxpro


【解决方案1】:

先说简单的:

  • 您的 Delphi 函数需要返回一个整数。
  • 字符串参数错误。 Delphi 字符串是托管的私有 Delphi 类型。这些参数应该是 PAnsiChar,指向以空字符结尾的 B 位字符数组的指针。

现在到字符串数组。从@TLama 的链接看来,数组无法编组。因此,您必须连接它们,可能使用双空终止字符串。或者多次调用该函数,让DLL将字符串收集到一个数组或列表中。

【讨论】:

  • 嘿,很抱歉,我使用内存中的代码发布了我的问题。两种简单的位情况都已经正确。我将更新问题以纠正我的错误。我正在尝试串联列表,并将报告更多。
  • 连接字符串有效。谢谢,大卫,谢谢 TLama。我想我不能 +1 评论,但还是谢谢你
  • 将数组的内容作为单个连接字符串传递实际上是documented 要求:“如果您在 Visual FoxPro 中处理的数据位于数组中,则必须遍历数组并在将它传递给 DLL 函数之前将其连接成一个表示 C 样式数组的单个字符串。”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多