自定义dll建议改为:*************************************************************************
library mydll;
uses
  SysUtils,
  Classes;procedure right(ch:pchar;n:word);stdcall;export;
var temp:string;
begin
  temp:=strpas(ch);
  if n>=strlen(ch) then exit;
  temp:=copy(temp,strlen(ch)-n+1,n);
  strpcopy(ch,temp);
end;
{$R *.res}
exports
    right name 'myright' ;
begin
end.
调用程序:unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type  
  pro=procedure (ch:pchar;i:cardinal);stdcall;
var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);
var ch:pchar;
    n:integer;
    fp:pro;
    mo:Thandle;
begin
    //ch:=pchar('');?无意义,删去
    mo:=loadlibrary('mydll.dll');
    if not assigned(mo) then
      begin
          messagebox(self.Handle ,'load mydll.dll faile!','load',mb_ok+mb_iconwarning);
          exit;
      end;
    fp:=getprocaddress(mo,'myright');
    if not assigned(fp) then
      begin
          freelibrary(mo);
          messagebox(self.Handle ,'getproceddrss faile!','getproddress',mb_ok+mb_iconwarning);
          exit;
      end;
    n:=strtoint(edit2.Text);
    ch:=strnew(pchar(edit1.text));
   ch:=strnew(pchar(edit1.text));//strpcopy(ch,edit1.Text);不对,ch未分配内存    fp(ch,n);
    edit3.text:=strpas(ch);
    strdispose(ch);
    freelibrary(mo);
end