我有一个用C编写的遗留DLL,它包含一个返回字符串的函数,我需要从Delphi访问这个函数.我有关DLL的唯一信息是用于访问函数的VB声明:
公共声明函数DecryptStr Lib"strlib"(Str As String)As String
我试过以下但没有成功:
宣言:
function DecryptStr(s: PChar): PChar; cdecl; external 'strlib.dll';
用法:
var p1, p2 : pchar; begin GetMem( p1, 255 ); StrPCopy( p2, 'some string to decrypt' ); p1 := DecryptStr( p2 ); end;
这始终使DLL与访问冲突崩溃.我不知所措.
有什么建议 ?
考虑重写您的测试代码,如下所示:
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;
如果仍然在调用DecryptStr时失败,请仔细阅读http://support.microsoft.com/kb/187912.