Delphi XE7中使用stdcall约定的PAnsiChar的DLL导出问题
我有一个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
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;