![]() |
DLL-verkleinern
Hallo:
ich habe eine einfache DLL geschreiben:
Code:
diese DLL ist jetzt 293 kb groß! Muß dass wirklich sein? also ich mein, kann man da nich noch irgendwass tun, damit die kleiner wird. Dabei meine ich nicht einen Leufzeitkomprierer (z.b. UPX).
library plugin;
{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muß sich in der ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt- Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die Strings als Parameter oder Funktionsergebnisse weitergibt. Dies trifft auf alle Strings zu, die von oder zur DLL weitergegeben werden -- auch diejenigen, die sich in Records oder Klassen befinden. ShareMem ist die Schnittstellen-Unit zu BORLNDMM.DLL, der gemeinsamen Speicherverwaltung, die zusammen mit der DLL weitergegeben werden muß. Um die Verwendung von BORLNDMM.DLL zu vermeiden, sollten String-Informationen als PChar oder ShortString übergeben werden. } uses SysUtils, Classes; {$R *.RES} function texter: pchar; stdcall; begin Result := pchar(datetimetostr(now)); end; exports texter; begin end. Danke theOMEGA |
Die Sysutils und die Classes blähen die DLL so auf. Du kannst diese Unnits weglassen und einfach nur die Funktionen rauskopieren, die du brauchst. Ich weiß aber nicht, ob das lizenzrechtlich legal ist.
|
Das ist lizenzrechtlich legal (glaube ich/ohne Gewähr), solange man den Source Code nicht veröffentlicht!
|
Luckie wird´s freuen, denn zum Thema Datum & Zeit und die Formatierung der Ausgabe kann ich folgendes bringen:
Code:
Das ganze stammt aus dem NT-Dienst-Demo von Assarbad und Luckie und benutzt nur Systemfunktionen. Hier werden Datum & Zeit von Dienststart und -stop in eine Datei geschrieben.
[color=#000080][i]// @Luckie: ;o)[/i][/color]
[b]function[/b] frmt(mformat: [b]string[/b]; args: [b]array[/b] [b]of[/b] POINTER): [b]string[/b]; [b]var[/b] bla: pchar; [b]const[/b] Size = 1024; [b]begin[/b] getmem(bla, size); ZeroMemory(bla, size); wvsprintf(bla, pchar(mformat), pchar(@args)); result := [b]string[/b](bla); freemem(bla, size); [b]end[/b]; [b]var[/b] SystemTime : _SYSTEMTIME; [color=#000080][i]{ ... }[/i][/color] GetLocalTime(SystemTime); Write2Textfile(displayname + ' gestartet: ' + frmt('%.2d:%.2d Uhr - %.2d.%.2d.%.4d', [POINTER(SystemTime.wHour),POINTER(SystemTime.wMinute), POINTER(SystemTime.wDay),POINTER(SystemTime.wMonth), POINTER(SystemTime.wYear)]) + #13#10); @theomega: Schau dir mal den Format-String an! Wenn du den an deine Bedürfnisse anpasst, dann kannst du die Ausgabe so gestalten, als käme sie von datetimetostr. Nur, dass deine DLL mit obigen Systemfunktionen grandios klein werden wird. :wink: |
@theomega: Und du bist dir sicher, dass der Code keine Schutzverletzung erzeugt?
Zitat:
Eine bessere Lösung wäre dies:
Code:
[b]function[/b] texter(P: PChar; MaxLen: Integer): Integer; [b]stdcall[/b];
[b]var[/b] S: [b]string[/b]; [b]begin[/b] S := DateTimeToStr(Now); [b]if[/b] P <> [b]nil then[/b] StrLCopy(P, PChar(S), MaxLen); Result := Length(S); [b]end[/b]; |
Nein, der Code läuft problemlos, und ohne Fehler
|
Trotzdem birgt er eine Fehlerquelle, die nicht zu unterschätzen ist. Er mag vielleicht in dem Zusammenhang funktioniere, wie du ihn bis jetzt einsetzt. Aber irgenwann wird er dir den letzen Nerv rauben, da du genau weißt, dass er funktionieren muss, da er in anderen Programmen doch auf funktioniert, und du suchst den Fehler dann ganz wo anders.
|
müßte es aber nicht heißen:
Code:
also mit einem var.
function texter(var P: PChar; MaxLen: Integer): Integer; stdcall;
var S: string; begin S := DateTimeToStr(Now); if P <> nil then StrLCopy(P, PChar(S), MaxLen); Result := Length(S); end; |
Nein, das var ist nicht notwendig, da nur der Inhalt, auf den P zeigt geändert wird. Oder siehst du irgendwo im Code ein P := ...?
|
Versteh ich den Code jetzt richtig? Also das Ergebnis wird in die Variable mit dem Namen aus p geschrieben?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz