Pascal und CBuilder



  • Hi.

    Original Code

    TDCP_hashclass= class of TDCP_hash;
    
    // Steht in einer Klasse
    procedure InitStr(const Key: string; HashType: TDCP_hashclass);
    
    TDCP_sha1= class(TDCP_hash)
    begin
    // Klassensachen
    end;
    
    Cipher.InitStr(KeyStr,TDCP_sha1);
    

    Will ich jetzt

    Cipher->InitStr(KeyStr,TDCP_sha1);
    

    Sagt er: E2108 Ungültige Verwendung von typedef 'TDCP_sha1'

    Die Headerdatei #include "DCPsha1.hpp" habe ich in Unit1.h eingebunden.
    Was genau ist denn mein Fehler?



  • Ich ahbe auch schon das probiert gehabt:

    TDCP_sha1 *hash1 = new TDCP_sha1(this);
    TDCP_sha1 *hash2;
    
    Cipher->InitStr(KeyStr,hash1);
    Cipher->InitStr(KeyStr,hash2);
    

    Bei beiden kommt
    E2034 Konvertierung von 'TDCP_sha1 *' nach 'TMetaClass *' nicht möglich
    E2342 Keine Übereinstimmung des Typs beim Parameter 'HashType' ('TMetaClass *' erwartet, 'TDCP_sha1 *' erhalten)

    Ist Pascal CBulder so überlegen und dieser kann sowas garnicht, oder ... ich sags mal lieber nicht 🙄 🤡



  • Hallo,

    Versuch doch mal

    Cipher->InitStr(KeyStr,__classid(TDCP_sha1));
    

    Es wäre aber schon praktisch gewesen uns die Deklaration von InitStr zu zeigen.



  • Danke für deine Antwort. InitStr ist allerdings oben erklärt. 🙄
    So dann werd ich das jetzt mal versuchen zu entschlüsseln und hoffen das Pascal->CBuilder auch geklappt hat 😉 Danke!

    P.S. Warum steht in der Hilfe, das man diesen Befehl aber nicht nutzen soll?
    Da es ein VCL Befehl ist, wie ist die standard c++ Alternative dazu?



  • Da stand die Deklaration von InitStr in Pascal nicht in C++.
    Eine direkte Alternative gibt es in C++ nicht. Sowas würde man wohl mit Templates lösen. Es gibt wohl Vorstellungen etwas ähnliches wie __classid im nächsten Standard einzuführen.



  • Aso, ja richtig an die .hpp habe ich garnicht gedacht. Sorry.
    Das wäre

    void __fastcall InitStr(const AnsiString Key, TMetaClass* HashType);
    

Anmelden zum Antworten