我有一个用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.