刚刚做了DLL,里面包含一个字符串解密的函数,在程序中引用这个函数时总是返回“Invalid pointer operation”。但将此函数直接放到程序中却不会报错。不知是什么原因?恳请大师指点。下面的DLL文件:
library Demo;uses
  SysUtils,
  Classes;function Decrypt(S:String;Key1,Key2:Word):String; StdCall;
var 
  I,j:Integer;
  TmpStr : String;
begin
  Result := '';
  for I:=1 to (length(S) div 2) do
  begin
    j:=(Integer(S[2*i-1])-65)*26;
    j:=j+(Integer(S[2*i])-65);
    Result := Result + Char(j);
  end;
  TmpStr := Result;
  for I:=1 to Length(TmpStr) do
  begin
    Result[I] := Char(Byte(TmpStr[I]) xor (Key1 shr 8));
    Key1 := (Byte(TmpStr[I]) + Key1) * Key1 + Key2;
  end;
end;exports
  Decrypt;
begin
end.

解决方案 »

  1.   

    要在DLL里使用STRING ,还要USE DELPHIMM这个文件。最好是使用PCHAR
      

  2.   

    在动态链接库中最好不要使用String 作为参数或者返回值,其实如果你用DELPHI的DLL WIZARD建立的DLL工程后,有一段英文说明,就是关于String作为参数和返回值的.你把第一个引用单元加上sharemem试试.
      

  3.   

    如果使用DELPHIMM或sharemem,发布是是否还要包含DelphiMM.dll?
      

  4.   

    不用,已经LINK进你的DLL里了。
      

  5.   

    >如果使用DELPHIMM或sharemem,发布是是否还要包含DelphiMM.dll?
    Delphi 200x?没试过,你可以看一下帮助。
    在以前需要带上 borlndmm.dll 的,所以我想当然的,delphimm.dll 也需要带上。--
    http://agui.net.googlepages.com
    mailto: agui.cn @ gmail.com