有几个用标准c语言写的函数,是一个算法,在一个.c的文件里, 现在需要在delphi中使用, 我应该怎么做啊?   我也看了一些相关的资料,一定要用dll吗?? 如果只能用dll,那crc16.c的文件怎么转成dll啊?
请各位高手不吝指导。。  真是多谢啊。。 急!!

解决方案 »

  1.   

    你可以用BCB编译为DLL。也可以编译为OBJ文件,在DELPHI中连接。也可以用DELPHI将其改写。
      

  2.   

    可以直接转成DLL的。
    你的代码是不是CRC校验的。有DELPHI代码啊.
      

  3.   

    程序就上这个了, 楼上真的有delphi的代码吗??  
    那对我就太重要了。。  多谢啊
    //  CRC16余式表
    const WORD crc16_table[16]=
    {
        0x0000, 0x1081, 0x2102, 0x3183,
        0x4204, 0x5285, 0x6306, 0x7387,
        0x8408, 0x9489, 0xa50a, 0xb58b,
        0xc60c, 0xd68d, 0xe70e, 0xf78f
    };
    // CRC-ITU 原始算法,逆序
    WORD CalcCRC16(BYTE * pPtr,WORD nCount)
    {
    WORD  wCRC,i;
    wCRC = 0; while (nCount > 0)
    {
    nCount--;
    wCRC = wCRC ^ (WORD)(0xFF&*pPtr++);
    for (i=0; i<8; i++)
    {
    if (wCRC & 0x0001)
    wCRC = wCRC >> 1 ^ 0x8408;
    else
    wCRC = wCRC >> 1;
    }
    }
    wCRC = (wCRC<< 8) | ((wCRC >> 8) & 0xFF);
        return wCRC;
    }// CRC-ITU 逆序,查表
    WORD CalcCRC16R(BYTE * pPtr,WORD nCount)
    {
        BYTE ucTmp;
        WORD wCRC=0;
        while(nCount-- > 0)
        {
            ucTmp = (BYTE)(wCRC&0x000f);
            wCRC >>= 4;
            wCRC ^= crc16_table [ucTmp^(*pPtr&0x0f)];
            ucTmp = (BYTE)(wCRC&0x000f);
            wCRC >>= 4;
    //      wCRC ^= crc16_table [ucTmp^(*pPtr/16)];
            wCRC ^= crc16_table [ucTmp^(*pPtr>>4)];
            pPtr++;
        }    ucTmp = wCRC >> 8;
        wCRC <<= 8;
        wCRC |= ucTmp;    return wCRC;
    }
      

  4.   

    Unit Crc16;
    Interface
    { Note: Your crc Variable must be initialized to 0, before       }
    {       using tis routine.                                       }
    { Translated to Turbo Pascal (tm) V4.0 March, 1988 by J.R.Louvau }
    {                                                                }
    Function UpdCrc(cp: Byte; crc: Word): Word;Implementation(* crctab calculated by Mark G. Mendel, Network Systems Corporation *)
    Const crctab : Array[0..255] of Word = (
        $0000,  $1021,  $2042,  $3063,  $4084,  $50a5,  $60c6,  $70e7,
        $8108,  $9129,  $a14a,  $b16b,  $c18c,  $d1ad,  $e1ce,  $f1ef,
        $1231,  $0210,  $3273,  $2252,  $52b5,  $4294,  $72f7,  $62d6,
        $9339,  $8318,  $b37b,  $a35a,  $d3bd,  $c39c,  $f3ff,  $e3de,
        $2462,  $3443,  $0420,  $1401,  $64e6,  $74c7,  $44a4,  $5485,
        $a56a,  $b54b,  $8528,  $9509,  $e5ee,  $f5cf,  $c5ac,  $d58d,
        $3653,  $2672,  $1611,  $0630,  $76d7,  $66f6,  $5695,  $46b4,
        $b75b,  $a77a,  $9719,  $8738,  $f7df,  $e7fe,  $d79d,  $c7bc,
        $48c4,  $58e5,  $6886,  $78a7,  $0840,  $1861,  $2802,  $3823,
        $c9cc,  $d9ed,  $e98e,  $f9af,  $8948,  $9969,  $a90a,  $b92b,
        $5af5,  $4ad4,  $7ab7,  $6a96,  $1a71,  $0a50,  $3a33,  $2a12,
        $dbfd,  $cbdc,  $fbbf,  $eb9e,  $9b79,  $8b58,  $bb3b,  $ab1a,
        $6ca6,  $7c87,  $4ce4,  $5cc5,  $2c22,  $3c03,  $0c60,  $1c41,
        $edae,  $fd8f,  $cdec,  $ddcd,  $ad2a,  $bd0b,  $8d68,  $9d49,
        $7e97,  $6eb6,  $5ed5,  $4ef4,  $3e13,  $2e32,  $1e51,  $0e70,
        $ff9f,  $efbe,  $dfdd,  $cffc,  $bf1b,  $af3a,  $9f59,  $8f78,
        $9188,  $81a9,  $b1ca,  $a1eb,  $d10c,  $c12d,  $f14e,  $e16f,
        $1080,  $00a1,  $30c2,  $20e3,  $5004,  $4025,  $7046,  $6067,
        $83b9,  $9398,  $a3fb,  $b3da,  $c33d,  $d31c,  $e37f,  $f35e,
        $02b1,  $1290,  $22f3,  $32d2,  $4235,  $5214,  $6277,  $7256,
        $b5ea,  $a5cb,  $95a8,  $8589,  $f56e,  $e54f,  $d52c,  $c50d,
        $34e2,  $24c3,  $14a0,  $0481,  $7466,  $6447,  $5424,  $4405,
        $a7db,  $b7fa,  $8799,  $97b8,  $e75f,  $f77e,  $c71d,  $d73c,
        $26d3,  $36f2,  $0691,  $16b0,  $6657,  $7676,  $4615,  $5634,
        $d94c,  $c96d,  $f90e,  $e92f,  $99c8,  $89e9,  $b98a,  $a9ab,
        $5844,  $4865,  $7806,  $6827,  $18c0,  $08e1,  $3882,  $28a3,
        $cb7d,  $db5c,  $eb3f,  $fb1e,  $8bf9,  $9bd8,  $abbb,  $bb9a,
        $4a75,  $5a54,  $6a37,  $7a16,  $0af1,  $1ad0,  $2ab3,  $3a92,
        $fd2e,  $ed0f,  $dd6c,  $cd4d,  $bdaa,  $ad8b,  $9de8,  $8dc9,
        $7c26,  $6c07,  $5c64,  $4c45,  $3ca2,  $2c83,  $1ce0,  $0cc1,
        $ef1f,  $ff3e,  $cf5d,  $df7c,  $af9b,  $bfba,  $8fd9,  $9ff8,
        $6e17,  $7e36,  $4e55,  $5e74,  $2e93,  $3eb2,  $0ed1,  $1ef0
    );(*
     * updcrc derived from article Copyright (C) 1986 Stephen Satchell.
     *  NOTE: First argument must be in range 0 to 255.
     *        Second argument is referenced twice.
     *
     * Programmers may incorporate any or all code into their Programs,
     * giving proper credit within the source. Publication of the
     * source routines is permitted so long as proper credit is given
     * to Stephen Satchell, Satchell Evaluations and Chuck Forsberg,
     * Omen Technology.
     *)
    Function UpdCrc(cp: Byte; crc: Word): Word;
    begin { UpdCrc }
      UpdCrc := crctab[((crc SHR 8) and 255)] xor (crc SHL 8) xor cp
    end;end. {Unit}
      

  5.   

    还有一个CRC32的:
    unit Crc32;interfaceuses Windows;  const
      Table: array[0..255] of DWORD =
        ($00000000, $77073096, $EE0E612C, $990951BA,
        $076DC419, $706AF48F, $E963A535, $9E6495A3,
        $0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988,
        $09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91,
        $1DB71064, $6AB020F2, $F3B97148, $84BE41DE,
        $1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7,
        $136C9856, $646BA8C0, $FD62F97A, $8A65C9EC,
        $14015C4F, $63066CD9, $FA0F3D63, $8D080DF5,
        $3B6E20C8, $4C69105E, $D56041E4, $A2677172,
        $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B,
        $35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940,
        $32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59,
        $26D930AC, $51DE003A, $C8D75180, $BFD06116,
        $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F,
        $2802B89E, $5F058808, $C60CD9B2, $B10BE924,
        $2F6F7C87, $58684C11, $C1611DAB, $B6662D3D,
        $76DC4190, $01DB7106, $98D220BC, $EFD5102A,
        $71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433,
        $7807C9A2, $0F00F934, $9609A88E, $E10E9818,
        $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01,
        $6B6B51F4, $1C6C6162, $856530D8, $F262004E,
        $6C0695ED, $1B01A57B, $8208F4C1, $F50FC457,
        $65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C,
        $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65,
        $4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2,
        $4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB,
        $4369E96A, $346ED9FC, $AD678846, $DA60B8D0,
        $44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9,
        $5005713C, $270241AA, $BE0B1010, $C90C2086,
        $5768B525, $206F85B3, $B966D409, $CE61E49F,
        $5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4,
        $59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD,
        $EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A,
        $EAD54739, $9DD277AF, $04DB2615, $73DC1683,
        $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8,
        $E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1,
        $F00F9344, $8708A3D2, $1E01F268, $6906C2FE,
        $F762575D, $806567CB, $196C3671, $6E6B06E7,
        $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC,
        $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5,
        $D6D6A3E8, $A1D1937E, $38D8C2C4, $4FDFF252,
        $D1BB67F1, $A6BC5767, $3FB506DD, $48B2364B,
        $D80D2BDA, $AF0A1B4C, $36034AF6, $41047A60,
        $DF60EFC3, $A867DF55, $316E8EEF, $4669BE79,
        $CB61B38C, $BC66831A, $256FD2A0, $5268E236,
        $CC0C7795, $BB0B4703, $220216B9, $5505262F,
        $C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04,
        $C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D,
        $9B64C2B0, $EC63F226, $756AA39C, $026D930A,
        $9C0906A9, $EB0E363F, $72076785, $05005713,
        $95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38,
        $92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21,
        $86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E,
        $81BE16CD, $F6B9265B, $6FB077E1, $18B74777,
        $88085AE6, $FF0F6A70, $66063BCA, $11010B5C,
        $8F659EFF, $F862AE69, $616BFFD3, $166CCF45,
        $A00AE278, $D70DD2EE, $4E048354, $3903B3C2,
        $A7672661, $D06016F7, $4969474D, $3E6E77DB,
        $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0,
        $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9,
        $BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6,
        $BAD03605, $CDD70693, $54DE5729, $23D967BF,
        $B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94,
        $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D);procedure CalcCRC32(FileName: string; var CRC32: DWORD);
        
    implementationprocedure CalcCRC32(FileName: string; var CRC32: DWORD);
    var
      F: file;
      BytesRead: DWORD;
      Buffer: array[1..65521] of Byte;
      i: Word;
    begin
      FileMode := 0;
      CRC32    := $ffffffff;
      {$I-}
      AssignFile(F, FileName);
      Reset(F, 1);
      if IOResult = 0 then
      begin
        repeat      BlockRead(F, Buffer, SizeOf(Buffer), BytesRead);
          for i := 1 to BytesRead do
            CRC32 := (CRC32 shr 8) xor Table[Buffer[i] xor (CRC32 and $000000FF)];
        until BytesRead = 0;
      end;
      CloseFile(F);
      {$I+}
      CRC32 := not CRC32;
    end;end.
      

  6.   

    上面那个是文件校验的。给你个值校验的:
    Unit CRC32c;
    Interface
      Const
        CRCSeed = $ffffffff;
        CRC32tab : Array[0..255] of LongInt = (
          $00000000, $77073096, $ee0e612c, $990951ba, $076dc419, $706af48f,
          $e963a535, $9e6495a3, $0edb8832, $79dcb8a4, $e0d5e91e, $97d2d988,
          $09b64c2b, $7eb17cbd, $e7b82d07, $90bf1d91, $1db71064, $6ab020f2,
          $f3b97148, $84be41de, $1adad47d, $6ddde4eb, $f4d4b551, $83d385c7,
          $136c9856, $646ba8c0, $fd62f97a, $8a65c9ec, $14015c4f, $63066cd9,
          $fa0f3d63, $8d080df5, $3b6e20c8, $4c69105e, $d56041e4, $a2677172,
          $3c03e4d1, $4b04d447, $d20d85fd, $a50ab56b, $35b5a8fa, $42b2986c,
          $dbbbc9d6, $acbcf940, $32d86ce3, $45df5c75, $dcd60dcf, $abd13d59,
          $26d930ac, $51de003a, $c8d75180, $bfd06116, $21b4f4b5, $56b3c423,
          $cfba9599, $b8bda50f, $2802b89e, $5f058808, $c60cd9b2, $b10be924,
          $2f6f7c87, $58684c11, $c1611dab, $b6662d3d, $76dc4190, $01db7106,
          $98d220bc, $efd5102a, $71b18589, $06b6b51f, $9fbfe4a5, $e8b8d433,
          $7807c9a2, $0f00f934, $9609a88e, $e10e9818, $7f6a0dbb, $086d3d2d,
          $91646c97, $e6635c01, $6b6b51f4, $1c6c6162, $856530d8, $f262004e,
          $6c0695ed, $1b01a57b, $8208f4c1, $f50fc457, $65b0d9c6, $12b7e950,
          $8bbeb8ea, $fcb9887c, $62dd1ddf, $15da2d49, $8cd37cf3, $fbd44c65,
          $4db26158, $3ab551ce, $a3bc0074, $d4bb30e2, $4adfa541, $3dd895d7,
          $a4d1c46d, $d3d6f4fb, $4369e96a, $346ed9fc, $ad678846, $da60b8d0,
          $44042d73, $33031de5, $aa0a4c5f, $dd0d7cc9, $5005713c, $270241aa,
          $be0b1010, $c90c2086, $5768b525, $206f85b3, $b966d409, $ce61e49f,
          $5edef90e, $29d9c998, $b0d09822, $c7d7a8b4, $59b33d17, $2eb40d81,
          $b7bd5c3b, $c0ba6cad, $edb88320, $9abfb3b6, $03b6e20c, $74b1d29a,
          $ead54739, $9dd277af, $04db2615, $73dc1683, $e3630b12, $94643b84,
          $0d6d6a3e, $7a6a5aa8, $e40ecf0b, $9309ff9d, $0a00ae27, $7d079eb1,
          $f00f9344, $8708a3d2, $1e01f268, $6906c2fe, $f762575d, $806567cb,
          $196c3671, $6e6b06e7, $fed41b76, $89d32be0, $10da7a5a, $67dd4acc,
          $f9b9df6f, $8ebeeff9, $17b7be43, $60b08ed5, $d6d6a3e8, $a1d1937e,
          $38d8c2c4, $4fdff252, $d1bb67f1, $a6bc5767, $3fb506dd, $48b2364b,
          $d80d2bda, $af0a1b4c, $36034af6, $41047a60, $df60efc3, $a867df55,
          $316e8eef, $4669be79, $cb61b38c, $bc66831a, $256fd2a0, $5268e236,
          $cc0c7795, $bb0b4703, $220216b9, $5505262f, $c5ba3bbe, $b2bd0b28,
          $2bb45a92, $5cb36a04, $c2d7ffa7, $b5d0cf31, $2cd99e8b, $5bdeae1d,
          $9b64c2b0, $ec63f226, $756aa39c, $026d930a, $9c0906a9, $eb0e363f,
          $72076785, $05005713, $95bf4a82, $e2b87a14, $7bb12bae, $0cb61b38,
          $92d28e9b, $e5d5be0d, $7cdcefb7, $0bdbdf21, $86d3d2d4, $f1d4e242,
          $68ddb3f8, $1fda836e, $81be16cd, $f6b9265b, $6fb077e1, $18b74777,
          $88085ae6, $ff0f6a70, $66063bca, $11010b5c, $8f659eff, $f862ae69,
          $616bffd3, $166ccf45, $a00ae278, $d70dd2ee, $4e048354, $3903b3c2,
          $a7672661, $d06016f7, $4969474d, $3e6e77db, $aed16a4a, $d9d65adc,
          $40df0b66, $37d83bf0, $a9bcae53, $debb9ec5, $47b2cf7f, $30b5ffe9,
          $bdbdf21c, $cabac28a, $53b39330, $24b4a3a6, $bad03605, $cdd70693,
          $54de5729, $23d967bf, $b3667a2e, $c4614ab8, $5d681b02, $2a6f2b94,
          $b40bbe37, $c30c8ea1, $5a05df1b, $2d02ef8d  );
    Function CRC32(value: Byte; crc: LongInt) : LongInt;
    Function CRCend( crc : LongInt ) : LongInt ;ImplementationFunction  CRC32(value: Byte; crc: LongInt) : LongInt;
    begin
      CRC32 := CRC32tab[Byte(crc xor LongInt(value))] xor
               ((crc shr 8) and $00ffffff);
    end;Function CRCend( crc : LongInt ): LongInt;
    begin
      CRCend := (crc xor CRCSeed);
    end;end.{
    Now to use it...With a LongInt Variable, say vCRC32, first seed it
      vCRC32 := CRCSeed;
    Then go Byte-by-Byte thorugh to calculate:
      For P := 1 to Size DO
        vCRC32 := CRC32(Bytes[P], vCRC32);  Then finish it off With CRCend    vCRC32 := CRCend(vCRC32);  You should be able to Write your own Dec2Hex Function =)
    }