C-Code beschleunigen und als Dll kompilieren



  • Hallo!
    Ich habe mir aus dem Internet einen C-Code heruntergeladen, welcher den Hash einer Datei mit dem Adler-32-Algorithmus berechnet.
    In der Windows-Eingabeaufforderung klappt das auch alles wunderbar (der Code wurde mit Visual C++ in eine Exe kompiliert), allerdings möchte ich aus dem Code nun eine Dll erzeugen, welche ich aus meinem Visual Basic-Programm heraus aufrufen kann.

    Daher muss ich den Code etwas verändern:
    Es soll nur noch ein Argument übergeben werden können (Pfad und Dateiname), außerdem sollen die Fehlermeldungen entfernt werden (es soll höchstens eine Fehlernummer zurückgegeben werden, welche ich in meinem Visual Basic-Programm auswerte) und es wäre auch toll, wenn man noch etwas machen könnte, um den Code nochmals zu beschleunigen.
    Und die wichtigste Anforderung: Der Code muss als 32Bit-Dll kompiliert werden können und die __stdcall-Konvention erfüllen.

    Leider kann ich die Aufgaben selbst nicht lösen, da ich nicht in C programmieren kann.

    Ich bin daher vollständig auf euch angewiesen und wäre euch wirklich dankbar, wenn ihr mir helfen könntet.
    Hier der Code:

    #include <stdio.h>
    #include <stdlib.h>
    
    unsigned long update_adler32(unsigned long old, unsigned char *buf, int len)
    {
    #define BASE 65521                     /* largest prime smaller than 65536 */
       unsigned long s1 = old & 0xffff;
       unsigned long s2 = (old >> 16) & 0xffff;
       int n;
       for (n = 0; n < len; n++)
       {
          s1 = (s1 + buf[n]) % BASE;
          s2 = (s2 + s1) % BASE;
       }
       return( (s2 << 16) + s1 );
    } /* update_adler32() */
    
    int main(int argc, char *argv[])
    {
       int RetCode, BufferSize, Number;
       FILE *CheckFile;
       unsigned char *Memory;
       unsigned long Adler32, TotalNumber;
    
       printf("\n checksum - calculates the Adler32 checksum of a given file\n");
       RetCode = 10;
       if (argc > 3) printf("\n error: too many arguments!\n");
       else
       {
          if (argc == 3) BufferSize = atoi(argv[2]) * 1024;
          else BufferSize = 16*1024;  /* voreingestellte Größe des Lesepuffers */
    
          if (argc > 1)
          {
             CheckFile = fopen(argv[1], "rb");
             if (CheckFile == NULL)
             {
                printf("\n error: could not open file for reading!\n");
             }
             else
             {
                Memory = malloc(BufferSize);
                if (Memory == NULL)
                   printf("\n error: could not allocate enough memory!\n");
                else
                {
                   printf("\n calculating checksum ...");
                   Adler32 = 1L;
                   TotalNumber = 0L;
                   do {
                      Number = fread(Memory, 1, BufferSize, CheckFile);
                      if (Number > 0)
                      {
                         Adler32 = update_adler32(Adler32, Memory, Number);
                         TotalNumber += Number;
                      }
                   } while (Number > 0);
                   printf("\r could read %lu bytes from file", TotalNumber);
                   printf("\n adler checksum is $%08lx\n", Adler32);
                   RetCode = 0;
                   free(Memory);
                }
                fclose(CheckFile);
             }
          } else printf("\n usage: checksum <filename> [buffersize in kbytes]\n");
       }
       return(RetCode);
    }                          /* Checksum.c   Copyright (c) Christian Siebert */
    


  • sollte nicht allzuschwer sein, aber hier in dem Forum gehts um Projekte - was bietest du denn an am? 😃

    mfg blan



  • [quote="FaVorith"] wäre euch wirklich dankbar, wenn ihr mir helfen könntet.

    Für 20€ mach ichs.

    Mail auf meiner HP

    Frank



  • [quote="DerAltenburger"]

    FaVorith schrieb:

    wäre euch wirklich dankbar, wenn ihr mir helfen könntet.

    Für 20€ mach ichs.

    Mail auf meiner HP

    Frank

    Ist sowas nicht Schwarzarbeit? 💡
    jetzt mal im ernst, darf man Geld fürs programmieren snehmen, wenn es um soetwas geht? Er zahlt ja hier dann keine Steuern, d.h. der Staat würde von den 20€ nichts bekommen.



  • wer sagt, dass er das nicht versteuert?
    Das ist eine untersellung und geht schon in die richtung Verleumdung 😉



  • [quote="DSD-Steve"]

    DerAltenburger schrieb:

    FaVorith schrieb:

    wäre euch wirklich dankbar, wenn ihr mir helfen könntet.

    Für 20€ mach ichs.

    Mail auf meiner HP

    Frank

    Ist sowas nicht Schwarzarbeit? 💡
    jetzt mal im ernst, darf man Geld fürs programmieren snehmen, wenn es um soetwas geht? Er zahlt ja hier dann keine Steuern, d.h. der Staat würde von den 20€ nichts bekommen.

    Neeeee!

    Ich schreib doch auch 'ne Rechnung MIT MWSt und führe die auch ordentlich ab!
    :p


Anmelden zum Antworten