当调用以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.

解决方案 »

  1.   

    to: d983074(d983074) 
    调用:
    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;
      

  2.   

    问题在这里:
    SetPass(edit1.Text)的返回值有问题,不是一个string类字符串
      

  3.   

    to:d983074(d983074) 
      Why? Thanks!
      

  4.   

    在DLL里面不要是使用string类型,你没有看到前面一大段的注释吗?使用string的话,必须use sharemem单元,在你的调用程序和DLL里面都要使用ShareMem!
      

  5.   

    建议为了动态库的通用性,还是将string全部换成char * 或是pchar类型
      

  6.   

    to: Kingron(单身走我路……) 
    即使我加上ShareMe也还是不行。
      

  7.   

    DLL中的返回值和变量最好不要使用String!!!错在这里!!!最好使用PChar和ShortString类型!!!
    如果不会使用PChar,将你的String类型改成ShortString类型就没有问题了!!!