![]() |
Delphi-Version: XE2
Standardparameter im Prototyp für DLL weglassen
Moin.
Gesetzt ich habe denn Fall ich habe eine dll geschrieben mit folgender Funktion:
Delphi-Quellcode:
function MyFunction(a: Integer; b: Boolean = false): Cardinal; stdcall;
Nun möchte ich die dll an einen anderen Softwareentwickler weitergeben. Dieser soll bzw. brauch von dem Parameter b aber nichts wissen und soll somit für b immer false verwenden. Damit er auf die Funktion in der dll zugreifen kann, möchte ich eine pas Datei mitgeben welche die Schnittstelle zur Funktion enthält. Kann ich dort den Standardparameter einfach weglassen, etwa in dieser Form?
Delphi-Quellcode:
Oder kann dies zu Problemen führen?
unit MyDll;
interface function MyFunction(a: Integer): Cardinal; stdcall; implementation function MyFunction(a: Integer): Cardinal; stdcall; external 'MyDll.dll'; |
AW: Standardparameter im Prototyp für DLL weglassen
Nein, denn bei dieser Aufrufkonvention werden die Parameter auf den(selben) Stack gepusht, wo auch die Rücksprungsadresse sich befindet. So geht das also nicht!
|
AW: Standardparameter im Prototyp für DLL weglassen
Geht nicht.
Die Schnittstelle muß komplett sein, denn beim Aufruf muß dieser Parameter mit rein. (und sei es nur gefüllt mit dem Defaultwert) Du kannst höchstens 2 Schnittstellen erstellen. Eine mit beiden Parametern und Eine ohne das B. Und freigegeben/exportieren tust du dann mindestens die Letztere. |
AW: Standardparameter im Prototyp für DLL weglassen
Mach es doch einfach so:
Delphi-Quellcode:
Wenn derjenige den Parameter gar nicht finden können soll, bleibt nur eine entsprechende Funktion zu exportieren.
unit MyDll;
interface function MyFunction(a: Integer): Cardinal; implementation function MyFunctionFunc(a: Integer; b: Boolean): Cardinal; stdcall; external 'MyDll.dll' name 'MyFunction'; function MyFunction(a: Integer): Cardinal; begin Result := MyFunctionFunc(a, False); end; Nebenbei sind generische Typen für DLL-Schnittstellen nicht wirklich geeignet, da es keine konkreten Typen sind. Besser wären LongInt usw. ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:55 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