Delphi XE7中使用stdcall约定的PAnsiChar的DLL导出问题

Delphi XE7中使用stdcall约定的PAnsiChar的DLL导出问题,delphi,delphi-xe7,dllexport,Delphi,Delphi Xe7,Dllexport,我有一个DLL,它有一个函数 Decrypt(aText, aKey: PAnsiChar): PAnsiChar; stdcall 这个函数已经被导出了。 作为 如果我通过以下方式从客户处打电话: lH := LoadLibrary('EncDec.dll'); FEncDyc := GetProcAddress(lH , PChar('Decrypt')); lResult := FEncDyc(PAnsiChar(AnsiString(EditPwd.Text)), PAn

我有一个DLL,它有一个函数

Decrypt(aText, aKey: PAnsiChar): PAnsiChar; stdcall
这个函数已经被导出了。 作为

如果我通过以下方式从客户处打电话:

lH :=  LoadLibrary('EncDec.dll');
FEncDyc := GetProcAddress(lH , PChar('Decrypt'));

lResult := FEncDyc(PAnsiChar(AnsiString(EditPwd.Text)), 
    PAnsiChar(AnsiString(EditKey.Text)));
其中
FEncDyc
是指向func类型的指针

TDecrypt =  function (aText: PAnsiChar; aKey: PAnsiChar): PAnsiChar;
我总是得到参数aText和aKey的垃圾值;我哪里做错了? 如果我将dll的定义更改为

Decrypt(aText, aKey: PAnsiChar): PAnsiChar; export;
我在DLL中得到的值没有垃圾字符-工作正常

stdcall的代码中有什么错误,如果改用export key,又有什么区别呢


另外,请建议:传递PAnsiChar的正确方法是什么,以及如何将其键入my dll中的AnsiString。

导入时您没有指定调用约定。而不是

TDecrypt = function(aText: PAnsiChar; aKey: PAnsiChar): PAnsiChar;
你需要

TDecrypt = function(aText: PAnsiChar; aKey: PAnsiChar): PAnsiChar; stdcall;

一定要小心返回值。必须确保使用
GetMem
或等效工具动态分配返回的值。您还需要从DLL导出deallocator。

如果需要传递类型为PansiChar的值,这是正确的方法吗?您的传递很好。转换为AnsiString,然后转换为PAnsiChar,这很好。
TDecrypt = function(aText: PAnsiChar; aKey: PAnsiChar): PAnsiChar; stdcall;