将字符串参数从vfp 9发送到在delphi 2007上创建的dll

时间:2014-05-18 14:21:36

标签: delphi dll visual-foxpro

我尝试通过将字符串从VFP 传递到Delphi的DLL,从Visual FoxPro 9中使用Delphi的DLL。一旦我运行VFP代码,Foxpro崩溃了。我的字符串值不超过254个字符。

在delphi的代码中包含ShareMem没有任何区别。似乎使用了错误的字符串类型,我真的不知道其他类型的字符串代码。

请帮我一个关于如何传递字符串的例子。

dll代码在Delphi中运行良好。

在delphi的DLL中......


library dll_examp_With_PARA;

uses
  ShareMem,
  SysUtils,
  Classes,
  Dialogs;

{$R *.res}

function showValues(var a:shortstring):shortstring; stdcall; export;

  begin
     Result:=('you passed ' + a);
  end;

  exports showValues;
end.
VFP中的

.....


CLEAR ALL

LOCAL vfpString as String

DECLARE STRING showValues IN dll_examp_With_PARA.dll STRING 

vfpString = 'Hello World!'

    ? showValues(vfpString)

    CLEAR ALL

1 个答案:

答案 0 :(得分:1)

无法从Foxpro调用该DLL。您将不得不修改DLL或用适配器包装它。问题是您使用的是不适合互操作的私有Delphi字符串类型。您必须了解不同的语言有不同的方式来表示字符数据。对于二进制互操作,双方必须使用相同的表示。

从Foxpro传递字符串作为指向8位ANSI字符的以空值终止的数组的指针。在Delphi中PAnsiChar。这将允许您将Foxpro中的字符串传递给Delphi。在另一个方向,您需要Foxpro代码分配足够大的字符串。然后Delphi代码可以将文本复制到Foxpro提供的内存中。因此,您还需要传递out字符串缓冲区的长度,以便Delphi代码可以避免写入超出缓冲区的末尾。

添加Sharemem无济于事。这允许两个Delphi模块共享相同的本机Delphi堆。互操作很困难。你无法通过反复试验获得任何好处。