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

将字符串参数从vfp 9发送到delphi 2007上创建的dll,delphi,dll,visual-foxpro,Delphi,Dll,Visual Foxpro,我试图通过将字符串从VFP传递到Delphi的DLL,从visualfoxpro9使用Delphi的DLL。一旦我运行VFP代码,Foxpro就会崩溃。我的字符串值少于254个字符 在delphi的代码中包含ShareMem没有任何区别。似乎使用了错误的字符串类型,我真的不知道要编码的其他类型的字符串 请帮我举一个如何传递字符串的例子 dll代码在Delphi中运行良好 在delphi的DLL中… 在VFP中... 无法从Foxpro调用该DLL。您必须修改DLL或用适配器包装它。问题是您使

我试图通过将字符串从VFP传递到Delphi的DLL,从visualfoxpro9使用Delphi的DLL。一旦我运行VFP代码,Foxpro就会崩溃。我的字符串值少于254个字符

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

请帮我举一个如何传递字符串的例子

dll代码在Delphi中运行良好

在delphi的DLL中…


在VFP中...



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

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


添加
Sharemem
没有帮助。这允许两个Delphi模块共享同一个本地Delphi堆。互操作是困难的。试错法是行不通的

如果您的项目被非Delphi编写的东西使用,则不能使用
ShareMem
。理论上,您的Delphi DLL,尽管有一件事,应该是好的,假设它符合VFP的要求(我不知道)。也许这就是你在VFP项目中声明的方式?例如,我在该声明中没有看到任何类型的
stdcall
。@jerry Vfp DECLARE使用stdcall
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.
CLEAR ALL

LOCAL vfpString as String

DECLARE STRING showValues IN dll_examp_With_PARA.dll STRING 

vfpString = 'Hello World!'

    ? showValues(vfpString)

    CLEAR ALL