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ärevoid __fastcall InitStr(const AnsiString Key, TMetaClass* HashType);