none
API-Funktionen mehrfach deklariert

    Frage

  • Hallo Community,

    Nur mal so eine Frage, die gerade aufgetaucht ist:

    Wie ist es eigentlich möglich, dass API-Funktionen, die mehrfach als Public deklariert werden, nicht vom Compiler angemosert werden.

    Zweimal im gleichen Modul ist OK, aber in verschiedenen Modulen passiert nix. Warum?

    Danke Roland


    It's no problem, it's just the syntax

    Freitag, 3. Mai 2013 08:12

Alle Antworten

  • Hallo Roland

    Im Unterschied zu Variablen Deklarationen handelt es sich bei den API Deklarationen nicht um eine Definition einer Funktion, sondern um einen Alias für eine bereits existierende Library Function oder Sub. Dies wird über das Schlüsselwort Lib bekannt gegeben.
    VBA legt dann nur fest, um welche API Function es sich handelt und legt die Pointer zu den Parametern fest. Allenfalls merkt sich VBA noch den Typen des Rückgabewertes, damit der Compiler kontrollieren kann, ob da nicht eine Birne in den Apfelkorb gelegt wird.

    Die Auflösung erfolgt IIRC so, dass von innen nach aussen gegangen wird, um herauszufinden, welcher Alias verwendet werden soll, also zuerst mal im eigenen Modul, falls da nicht gefunden, in allen anderen Modulen (muss dort als Public definiert sein). Sobald der Alias aufgelöst werden kann, wird dieser benutzt, auch wenn weiter aussen noch eine andere Definition vorliegt, die den gleichen Alias hat.

    Du hast aber schon recht, es ist gefährlich, sich darauf zu verlassen. Ich würde in jedem Fall die API Funktionen immer als Private deklarieren. Im Modul dann selber eine Public Funktion, welche eine "Schale" um den API Call legt und dann z.B. die Umwandlungen von Pointern in Strings, etc. vornimmt, falls das notwendig ist. Diese ist dann von anderen Modulen ohne API Kenntnisse aufgerufen werden kann.

    Gruss
    Henry

    Freitag, 3. Mai 2013 09:09