Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » C-Code beschleunigen und als Dll kompilieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.03.2006, 15:01 Uhr
FaVorith



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:

C++:
#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 */

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.03.2006, 15:32 Uhr
mike
Pinguinhüpfer
(Operator)



--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.03.2006, 19:21 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo, eine DLL hat keine "main" sondern exportiert funktionen. Schau dir mal den Grundaufbau einer DLL an.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: