我给你以个例子: The cdecl convention is useful when you call functions from DLLs written in C or C++;unit SwDes;interfaceuses SysUtils,Dialogs,windows,commstruct;type
   TCalCRC=function (pData:Pointer;Datalen:integer):word;cdecl;
   TDeDES=procedure (Block:Pchar);cdecl;
   TDESinit=function(Mode:integer):integer;cdecl;
   TDESDone=function :integer;cdecl;
   TDESSetKey=function(Key:pchar):integer;cdecl;
   TEnDES=procedure (Block:pchar);cdecl;
   Tseczh=procedure (id:integer;key:pchar;srcdata:pchar;destdata:pchar;datalen:integer);cdecl;
   TUnixTime=function :integer;cdecl;
   TUnixTimeStr=procedure (tim:integer;buf:pchar);cdecl;var
   HModule    :Thandle;
   SWIHModule :Thandle;
   CalCRC     :TCalCRC;
   DeDES:TDeDES;
   DESInit:TDESinit;
   DESDone:TDESDone;
   DESSetKey:TDESSetKey;
   EnDES:TEnDES;
   swiseczh:tseczh;
   UnixTime:TUnixTime;
   UnixTimeStr:TUnixTimeStr;
   procedure  setdeskey(key:pchar);              // des key   设置
   procedure Encode(p:pointer;len:integer);
   procedure Decode(p:pointer;len:integer);
   procedure CRC(Data:pSLI_BlockHead);
   function  LoadSecurityParam(Mode:integer):boolean;
   procedure UnLoadSecurityParam;
   procedure createdeskey(methord:integer;key:pchar);
   procedure seczh(id:integer;zh:pchar;key:pchar;len:integer);
   function  validcrc(pinfo:pSLI_BlockHead):boolean;
   function  punixtime:integer;
   procedure punixtimestr(tim:integer;var buf:string);   procedure unloadswisec;
   procedure loadswisec;
   function  gennet(netnum:pbyte):string;
   function  gennode(nodenum:pbyte):string;
implementationprocedure CRC(Data:pSLI_blockhead);
begin
    Data^.crc:=CalCRC(@Data.blocktype,Data^.blocksize-4);
end;procedure setdeskey(key:pchar);              // des key   设置
begin
    DESSetKey(key);
end;procedure Encode(p:pointer;len:integer);
var
   i,time:integer;
begin
     time:=len div 8;
     for i:=1 to time do
     begin
          EnDes(p);
          p:=pointer(integer(p)+8);
     end;
end;procedure Decode(p:pointer;len:integer);
var
   i,time:integer;
begin
     time:=len div 8;
     for i:=1 to time do
     begin
          DeDES(p);
          p:=pointer(integer(p)+8);
     end;
end;procedure loadswisec;
begin
     SWIHModule:=LoadLibrary(pchar('swisecu.dll'));
     if SWIHModule <> 0 then
     begin
         swiseczh:=GetProcAddress(SWIHModule,'SWI_SEC');
     end;
end;function LoadSecurityParam(Mode:integer):boolean;     //导入安全参数 值
begin
     Result:=false;
     UnloadSecurityParam;
     HModule:=LoadLibrary(pchar('descrc.dll'));
     if HModule<>0 then
     begin
          CalCRC:=GetProcAddress(HModule,'CalCRC');
          DeDES:=GetProcAddress(HModule,'dedes');
          EnDES:=GetProcAddress(HModule,'endes');
          DESInit:=GetProcAddress(HModule,'desinit');
          DESDone:=GetProcAddress(HModule,'desdone');
          DESSetKey:=GetProcAddress(HModule,'dessetkey');
          UnixTime:=GetProcAddress(HModule,'UnixTime');
          UnixTimeStr:=GetProcAddress(HModule,'UnixTimeStr');
          if (not assigned(CalCRC)) or (not assigned(DeDES))or(not assigned(EnDES))or(not assigned(desinit))or(not assigned(dessetkey))or(not assigned(desdone)) then
          begin
               UnloadSecurityParam;
          end
          else
          begin
               Result:=DESInit(Mode)=0;
          end;
     end;
end;procedure unloadswisec;
begin
    FreeLibrary(SWIHModule);
    swiseczh:=nil;
end;procedure UnLoadSecurityParam;
begin
     try
        if assigned (DesDone) then
        begin
             DESdone;
        end;
     finally
            FreeLibrary(HModule);
            CalCRC:=nil;
            DeDES:=nil;
            DESInit:=nil;
            DESDone:=nil;
            DESSetKey:=nil;
            EnDES:=nil;
            UnixTime:=nil;
            UnixTimeStr:=nil;
     end;
end;procedure createdeskey(methord:integer;key:pchar);
var t:array[0..8] of char;
    i,k:integer;
begin
    for i:=0 to 7 do
    begin
        k:=random(256);
        if k <> 0 then
        begin
            t[i]:=char(k);
        end
        else
        begin
            t[i]:=char(1);
        end;
    end;
    t[8]:=char(0);
    strcopy(key,pchar(@t));
end;
procedure seczh(id:integer;zh:pchar;key:pchar;len:integer);
var szh:array[0..16] of char;
    dzh:array[0..16] of char;
    t:string;
    var i:integer;
begin
    strcopy(pchar(@szh),zh);
    t:=strpas(zh);
    for i:=length(t) to len-1 do
    begin
        szh[i]:=char(32);
    end;
    t:=strpas(szh);
    swiseczh(id,key,pchar(@szh),pchar(@dzh),length(t));
    for i:=0 to len-1 do
    begin
        pchar(integer(zh)+i)^:=dzh[i];
    end;
end;function validcrc(pinfo:pSLI_blockhead):boolean;
var i:integer;
begin
    i:=CalCRC(@pinfo.blocktype,pinfo^.blocksize-4);
    if pinfo^.crc=i then
       result:=true
    else
       result:=false;
end;function gennet(netnum:pbyte):string;     //取得网络名称
var i:integer;
    s,p:string;
begin
    s:='';
    for i:=0 to 3 do          //10101010
    begin
        p:=inttohex((pbyte(integer(netnum)+i)^ shr 4),1);
        s:=s+p;
        p:=inttohex((pbyte(integer(netnum)+i)^ and $0f),1);
        s:=s+p;
    end;
    result:=s;
end;function gennode(nodenum:pbyte):string;
var i:integer;
    s,p:string;
begin
    s:='';
    for i:=0 to 5 do
    begin
        p:=inttohex((pbyte(integer(nodenum)+i)^ shr 4),1);
        s:=s+p;
        p:=inttohex((pbyte(integer(nodenum)+i)^ and $0f),1);
        s:=s+p;
    end;
    result:=s;
end;function punixtime:integer;
begin
    result:=UnixTime;
end;procedure punixtimestr(tim:integer;var buf:string);
var pbuf:array[0..90] of char;
begin
    try
       UnixTimeStr(tim,@pbuf);
       buf:=strpas(pbuf);
    except
       buf:='';
    end;
end;
end.#include <windows.h>
#include <time.h>
#include "DLL.h"
__declspec( dllexport )WORD CalCRC(void *pData, int nDataLen)
{
WORD acc = 0;
int i;
unsigned char* Data = (unsigned char*) pData; while(nDataLen--)
{
acc = acc ^ (*Data++ << 8);
for(i = 0; i++ < 8; )
if(acc & 0x8000)
acc = (acc << 1) ^ 0x1021;
else
acc <<= 1;
} // Swap High and Low byte
i = ( (WORD) ( ((UCHAR)acc) << 8) ) | ((WORD)(acc >> 8)); return i;
}__declspec( dllexport )long UnixTime()
{
time_t t; t=time(NULL);
return (long)t;
}__declspec( dllexport )void UnixTimeStr(long t,char *buf)
{
struct tm* h;
time_t m; m=(time_t)t;
h=localtime(&m);
strftime(buf,80,"%Y%m%d",h);
}include <windows.h>
#ifndef DLL#if defined(__cplusplus)
extern "C"{
#endif__declspec( dllexport ) WORD CalCRC(void *pData, int nDataLen);
__declspec( dllexport ) void dedes(char *block);
__declspec( dllexport ) int desdone();
__declspec( dllexport ) int desinit(int mode);
__declspec( dllexport ) int dessetkey(char *key);
__declspec( dllexport ) void endes(char * block);
__declspec( dllexport )void UnixTimeStr(long t,char *buf);
__declspec( dllexport )long UnixTime();#if defined(__cplusplus)
}
#endif 
#define DLL
#endif