library MyDll;uses
  //windows,
  SysUtils,
  //dialogs,
  Classes;
//{$R *.RES}
var
  //system
  ErrorMessage : string;
  MyApmodem : TApmodem;
  MyTcomport : TComPort;
  SaveExit : pointer;
//格式化SHORTSTRING
procedure FormatShortString(var s:shortstring);
var
  li_len : integer;
begin
  li_len := length(s);
  move(s[1],s[0],li_len);
  s[li_len] := #0;
end;
//*******************************************************************//
//                    DLL要输出的一组函数                            //
//*******************************************************************//
//获得最后的错误信息
Function Func_GetLastError(out msg : ShortString):integer;stdcall;
begin
   msg := ErrorMessage;
   FormatShortString(msg);
   result := 1;
end;
//3.函数
Function func_dosomething :integer;stdcall;
var
   li_return : integer;
begin
   ErrorMessage := '';
   try
     ......
   except
      on E: Exception do
         begin
            ErrorMessage := string(E.Message);
            li_return := -1;
         end;
   end;
   result := li_return;
end;
//自定义DLL退出函数
procedure LibExit;
begin
   try
     MyApmodem.Destroy ;
     Mycomport.Destroy ;
   except
   end ;
   ExitProc := SaveExit;  // restore exit procedure chain
end;exports  func_dosomething index 1,
  func_GetLastError index 2
;
begin
   //init
   MyApmodem := TApmodem.Create(Myapmodem);
   MyComport := Tcomport.Create(MyComport);   SaveExit := ExitProc;  // save exit procedure chain
   ExitProc := @LibExit;  // install LibExit exit procedure
end.