从Delphi中的C DLL获取字符串返回值

Kev*_*rty 4 c delphi dll

我有一个用C编写的遗留DLL,它包含一个返回字符串的函数,我需要从Delphi访问这个函数.我有关DLL的唯一信息是用于访问函数的VB声明:

公共声明函数DecryptStr Lib"strlib"(Str As String)As String

我试过以下但没有成功:

宣言:

function DecryptStr(s: PChar): PChar; cdecl; external 'strlib.dll';
Run Code Online (Sandbox Code Playgroud)

用法:

var
  p1, p2 : pchar;
begin
  GetMem( p1, 255 );
  StrPCopy( p2, 'some string to decrypt' );
  p1 := DecryptStr( p2 );
end;
Run Code Online (Sandbox Code Playgroud)

这始终使DLL与访问冲突崩溃.我不知所措.

有什么建议 ?

小智 5

考虑重写您的测试代码,如下所示:

var
  p1, p2 : pchar;
begin
  GetMem( p1, 255 ); // initialize
  GetMem( p2, 255 );
  StrPLCopy( p2, 'some string to decrypt', 255 ); // prevent buffer overrun
  StrPLCopy( p1, DecryptStr( p2 ), 255); // make a copy since dll will free its internal buffer
end;
Run Code Online (Sandbox Code Playgroud)

如果仍然在调用DecryptStr时失败,请仔细阅读http://support.microsoft.com/kb/187912.