__property-Deklaration: Nutzung von überladenen Funktionen?



  • Hi zusammen,

    ich bin grade mächtig am Installieren von ActiveX-Objekten. Geht auch alles soweit ganz gut, nur eine Komponente bereitet mir Schwierigkeiten.

    Hier bekomme ich beim Compilieren der entsprechenden Unit folgende Fehler in der Header-Datei angezeigt:

    [C++ Error] BlnDialog_TLB.h(2184): E2347 Parameter mismatch in write access specifier of property FormBalloon

    Die Fehler beziehen sich alle auf __property-Deklarationen, die eigentlich vom C++Builder maschinell erstellt wurden und zwar, soweit ich feststellen konnte auf deren Schreibfunktionen (write = ...).
    Diese Funktionen sind alle überladen, sprich es existieren jeweils zwei Deklarationen der selben Funktion in der Headerdatei. In beiden Deklarationen wird jeweils einmal ein Wert vom Typ * und einmal ein Wert vom Typ ** übergeben.

    Beispiel:

    HRESULT __fastcall ÜberladeneFunktion(void* Variable1);
    HRESULT __fastcall ÜberladeneFunktion(void** Variable2);
    

    Der C++Builder lässt aber in den betroffenen Schreibfunktionen der _property-Deklarationen die jeweiligen Parameter für diese Funktionen weg. Das ganze sieht dann o.g. Beispiel folgend so aus:

    __property Eigenschaft = {read = ..., write = ÜberladeneFunktion};
    

    Nun frag ich mich, ob das funktioniert und wenn nein, ob ich dann für jede Funktiondeklaration auch eine separate __property-Deklaration vornehmen muß.

    Wenn Ihr wollt, kann ich Euch auch mal den Code posten. Wie gesagt, es geht zwar um ActiveX-Kompos, aber die Frage dürfte sich generell auf C++ beziehen.

    Gruß

    Udo

    [ Dieser Beitrag wurde am 10.03.2003 um 21:25 Uhr von Darkheart editiert. ]



  • Hi,

    zumindest die Zeilen, die Probleme verursachen hättest du im Original posten können..

    naja :

    [C++ Error] BlnDialog_TLB.h(2184): E2347 Parameter mismatch in write access specifier of property FormBalloon

    [cpp]

    __property TYP Eigenschaft = {read = Funktionsname, write = ÜberladeneFunktion}; [/cpp]

    void __fastcall ÜberladeneFunktion(void* Variable1);

    Die Typen von der Eigenschaft TYP und der Typ des Parameters der Funktion müssen übereinstimmen. Deshlab kann man die Eigenschaften auch nach belieben überladen. Ich bezweifle aber mal, das die Methode, welche nach write= Angegeben wird ein Rückgabe wert haben darf. Hab ich allerdings auch noch nie ausprobiert. Klingt aber recht unlogisch.



  • Hallo Andreas,

    ähm, na ja, wizigerweise handelt es sich hier um Code, der automatisch vom BCB beim Installieren der ActiveX-Komponente erzeugt wurde. Das ist nicht auf meinem Mist gewachsen *ggggg*.

    Aber ich habe den Fehler mittlerweile gefunden. Der BCB hatte zwar die einzelnen Funktionen korrekt deklariert, aber irgendwie hat er bei den einzelnen Properties Fehler reingezaubert. Scheint mir ein Bug oder ähnliches zu sein.

    Jedenfalls, ich habe die Rückgabewerte der _properties ergänzt und nun funktionierts astrein. Danke für Deine Hilfe.

    Gruß

    Udo



  • kein problem..

    😉


Anmelden zum Antworten