AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL-verkleinern

Ein Thema von theomega · begonnen am 9. Aug 2002 · letzter Beitrag vom 10. Aug 2002
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#1

DLL-verkleinern

  Alt 9. Aug 2002, 17:16
Hallo:
ich habe eine einfache DLL geschreiben:
Code:
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.
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).

Danke

theOMEGA
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2
  Alt 9. Aug 2002, 17:20
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#3
  Alt 9. Aug 2002, 17:27
Das ist lizenzrechtlich legal (glaube ich/ohne Gewähr), solange man den Source Code nicht veröffentlicht!
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#4
  Alt 9. Aug 2002, 19:01
Luckie wird´s freuen, denn zum Thema Datum & Zeit und die Formatierung der Ausgabe kann ich folgendes bringen:
Code:
[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);
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.

@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.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5
  Alt 9. Aug 2002, 20:48
@theomega: Und du bist dir sicher, dass der Code keine Schutzverletzung erzeugt?
Zitat:
Code:
[b]function[/b] texter: pchar; [b]stdcall[/b];
[b]begin[/b]
  Result := pchar(datetimetostr(now));
[b]end[/b];
Den PChar den du hier zurücklieferst liegt auf dem Stack. Wenn du danach eine Funktion aufrufst, wird der "string" überschrieben.
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];
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#6
  Alt 10. Aug 2002, 10:17
Nein, der Code läuft problemlos, und ohne Fehler
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7
  Alt 10. Aug 2002, 10:41
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.
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#8
  Alt 10. Aug 2002, 10:59
müßte es aber nicht heißen:
Code:
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;
also mit einem var.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9
  Alt 10. Aug 2002, 11:01
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 := ...?
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#10
  Alt 10. Aug 2002, 11:22
Versteh ich den Code jetzt richtig? Also das Ergebnis wird in die Variable mit dem Namen aus p geschrieben?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz