当调用以DLL文件时系统总提示我如下的错误,不知何解:
"Invalid pointer operation";DLL文件原码如下:
library Encryption;
uses
SysUtils,
Classes;{$R *.res}function SetPass(CONST Passwd:string):string;stdcall;
var
i,FKey:integer;
begin
Result := '';
Randomize;
FKey := Random($FF);
for i:=1 to Length(Passwd) do
Result := Result+Chr( Ord(Passwd[i]) xor i xor FKey);
Result := Result + Char(FKey);
end;function GetPass(const Passwd:string):string;stdcall
var
i,FKey:integer;
begin
Result := '';
FKey := Ord(Passwd[Length(Passwd)]);
for i:=1 to Length(Passwd) - 1 do
Result := Result+Chr( Ord(Passwd[i]) xor i xor FKey);
end;exports
SetPass index 1,
GetPass index 2;
begin
end.
"Invalid pointer operation";DLL文件原码如下:
library Encryption;
uses
SysUtils,
Classes;{$R *.res}function SetPass(CONST Passwd:string):string;stdcall;
var
i,FKey:integer;
begin
Result := '';
Randomize;
FKey := Random($FF);
for i:=1 to Length(Passwd) do
Result := Result+Chr( Ord(Passwd[i]) xor i xor FKey);
Result := Result + Char(FKey);
end;function GetPass(const Passwd:string):string;stdcall
var
i,FKey:integer;
begin
Result := '';
FKey := Ord(Passwd[Length(Passwd)]);
for i:=1 to Length(Passwd) - 1 do
Result := Result+Chr( Ord(Passwd[i]) xor i xor FKey);
end;exports
SetPass index 1,
GetPass index 2;
begin
end.
调用:
implementation
function SetPass(const Passwd:string):string;stdcall;external 'Encryption.dll';{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
begin
str:=SetPass(edit1.Text);
Label1.Caption:=str;
end;
SetPass(edit1.Text)的返回值有问题,不是一个string类字符串
Why? Thanks!
即使我加上ShareMe也还是不行。
如果不会使用PChar,将你的String类型改成ShortString类型就没有问题了!!!