Zitat von
Chewie:
Auch wenn ich das nicht ganz kapiere. searchId ist offensichtlich ein Objekt, im zweiten Parameter wird dieses aber in einen Zeiger auf ein Zeichen gecastet.
Ich weiß zwar nicht Bescheid über den Aufbau von C++-Klassen, aber nach meinem dafürhalten wird dort der Zeiger auf die
VMT übergeben?
Es ist der Aufruf eines Konstrukturs mit Länge und Pointer auf Zeichen als Parameter (ein literaler String wird auch immer als Pointer auf eine Zeichenkette behandelt). Sonst nix.
Zitat von
Robert Marquardt:
searchID ist offensichtlich ein C++ String.
Ist nur noch die Frage ob STL string oder CString!
Zitat von
Robert Marquardt:
Der typecast soll nur den korrekten Typ fuer den Konstruktor erzwingen.
Offensichtlich ist das aehnlich wie mit einem Delphi String, den man ja auch (fast) ungestraft zu einem PChar casten darf.
CComBSTR ist nichts weiter als ein "
OLE String" ... also ein WideString. Versuchs mal mit so einem und caste den immer ...
Zitat von
Chewie:
Zitat von
Robert Marquardt:
Offensichtlich ist das aehnlich wie mit einem Delphi String, den man ja auch (fast) ungestraft zu einem PChar casten darf.
Hm, aber ein Delphi-String ist ja ein Zeiger. searchId ist aber ein statisches Objekt, sonst würde ja oben der "->"-Operator und nicht der Punktoperator stehen. Und eine Datenstruktur in einen Zeiger zu casten, bereitet mir ziemliche Bauchschmerzen
Die Begründung verstehe ich nicht. Wieso statisches Objekt? Es ist einfach ein Objekt. Das Casten übernimmt in C++ auch der entsprechende Operator (hier vermutlich LPCTSTR), der wenn es eindeutig ist, auch weggelassen werden darf.
Zitat von
Chewie:
Außer natürlich, der Cast-Operator ist überladen
Es gibt zum Glück meist mehrere Operatoren bei solchen Objekten. CString besitzt, wie gesagt, einen für LPCTSTR.
Übrigens ist "(const char*)" ja LPCTSTR, insofern
UNICODE/_UNICODE nicht definiert sind! Die Vermutung liegt nahe, da im zweiten String ja ein
ANSI-Literal verwendet wird.