![]() |
procedur in dll um Parameter erweitern?
Hallo,
ich möchte neu Parameter zu einer bestehenden Procedur in einer DLL hinzufügen, dabei aber die Kompatibilität der alten Aufrufweise erhalten. Nun habe ich mir gedacht ich hänge die Parameter vordefiniert an.
Delphi-Quellcode:
Nur klappt das nicht so recht, da wenn ich test nun mit den alten Parametern aufrufe bekommt prm4 und prm5 nicht die Vordefinierten werte. Gibt es dafür irgendeine Lösung oder muss ich wirklich eine neu procedur einfügen, wäre nicht so super.
// alte Procedur
procedure Test(prm1, prm2, prm3: Pchar); stdcall; begin ... end; // neu mit angehängten Parametern procedure Test(prm1, prm2, prm3: Pchar; prm4: Boolean = False; prm5: Boolean = True); stdcall; begin ... end; exports Test; begin end. Gruß Thomas |
Re: procedur in dll um Parameter erweitern?
Und warum machst du es nicht wie es eben üblich wäre?
Delphi-Quellcode:
So bleibst du kompatibel und kannst neue Funktionalität hinzufügen.
// "Neue" Funktion ("alte" kopiert und neue Parameter angefügt)
procedure TestEx(prm1, prm2, prm3: Pchar; prm4, prm5: Boolean); stdcall; begin ... end; // "Alte" Funktion (ruft die "neue" mit den vorgegebenen hinzugekommenen Parametern auf) procedure Test(prm1, prm2, prm3: Pchar); stdcall; begin procedure TestEx(prm1, prm2, prm3, False, True); end; exports Test, TestEx; begin end. Sinnvoller wäre es allerdings, wenn du den Pointer zu einer Struktur als einzigen Parameter hättest und das erste Member dieser Struktur die Größe wäre. So könntest du je nach Größe der Struktur unterscheiden welche "Version" deiner Funktion der Aufrufer gerade aufrufen will. Wenn du das nicht machst, mußt du immer wieder "Ex" an den Namen anfügen oder deine Funktionsversionen durchnummerieren. Nach einer Weile könnte das etwas unübersichtlich werden :drunken: |
Re: procedur in dll um Parameter erweitern?
Hallo Olli,
erstmal danke für deine schnelle Antwort. Zitat:
Gruß Thomas |
Re: procedur in dll um Parameter erweitern?
die standardwerte die du dort angibst sind nur für den Compiler. Wenn du also irgendwo innerhalb der DLL diese Funktion aufrufen würdest und nicht alle Parameter angibst, so sorgt der compiler dafür. Der Compiler schreibt also für dich sozusagen die Standardwerte für den Aufruf hin. Da außerhalb der DLL aber die Standardwerte der compilierten DLL gar nicht existieren bzw. sichtbar sind wird da auch nix übergeben
|
Re: procedur in dll um Parameter erweitern?
Sag' mal, warum machst du das nicht via Überladung (overload)?
Oder geht das bei dlls nicht? (bitte nicht schlagen *duck*) Schönen Abend noch, |
Re: procedur in dll um Parameter erweitern?
Zitat:
Zitat:
|
Re: procedur in dll um Parameter erweitern?
Zitat:
overload ist eine compiler-gesteuerte Abmachung zwischen Programmierer und Programmiersprache. Da man eine DLL in verschiedensten Sprachen schreiben und aus verschiedensten Sprachen ansprechen können muß, siehst du vermutlich das Problem. Übrigens: bei cdecl könnte ein Mechanismus ähnlich overload durchaus funktionieren, aber ob man das dann als überladen deklarieren würde ist mir jetzt nicht ganz geläufig. Es wäre also möglich eine C-Funktion mit variabler Parameterzahl korrekt aufzurufen - aber eben nur, weil der Aufrufer den Stack aufräumt. In dem Fall ist die Abmachung zwischen Programmierer und Programmiersprache zweitrangig, weil alle Verantwortung immer auf Seiten des Aufrufers liegt. Bei stdcall gibt es eine Art Kooperation. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 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 by Thomas Breitkreuz