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