LPVOID?
-
Also es geht um den Datentyp in der Überschrift. Ich habe ihn gerade zum ersten Mal gesehen, als ich mich gerade mit dem Threads beschäftigte. Nun meine Frage was kann ich mit diesem anstellen. Eventuell ähnelt er ja einem Grunddatentyp wie int oder char????, wenn ja welchem. In welche Datentypen kann ich ihn umwandeln.
Ich danke für schnelle Hilfe!
-
*kurz nachdenkt* Afair ist LPVOID ein MFC-typedef für void* - und das stellt einen Zeiger auf undifferenzierten Speicherplatz dar. Den Typ kannst du in (theoretisch) beliebige andere Zeigertypen umwandeln, um den verwendeten Datenbereich vernünftig interpretieren zu können.
-
CStoll schrieb:
*kurz nachdenkt* Afair ist LPVOID ein MFC-typedef für void*
Winapi, nicht MFC.
LPVOID steht fuer long pointer to void. Das "long" stammt aus finstersten 16bit-Zeiten, das hat heute keine Bedeutung mehr.
-
also ein normaler void Zeiger? Naja und ich habe aber noch nie mit void Zeigern gearbeitet, gibt void nicht an das bei Funktionen zum Beispiel keine Parameter übergeben werden? Könntet ihr mir die Sache mit void etwas näher erklären!
-
void als Funktionsparameter oder Rückgabetyp steht tatsächlich für "keine Daten", void* steht in etwa für "Zeiger ohne Datentyp". Das bedeutet, der Pointer verweist auf irgendeinen Datenbereich, aber hat erst einmal keine Ahnung, was er mit diesem Bereich anfangen kann. Um die Daten sinnvoll nutzen zu können, mußt du erstens wissen, was dort stehen soll, und zweitens dieses Wissen mit dem Compiler teilen (indem du den void* an einen regulären Pointer zuweist).
Das wird von C immer dann genutzt, wenn du irgendeine Funktion unabhängig von den Datentypen ausführen willst - z.B. Speicherbereitstellung (malloc/free) oder Kopieroperationen (memcpy(strcpy/...).
PS: In C++ nimmt man dafür lieber templates und überladene Funktionen, aber die kennt C noch nicht.
-
und wie teile ich das dem compiler mit das der Zeiger einen int Wert zum Beispiel enthalten soll? Vll mit casten?
EDIT: Ich glaub ich hab mich verklickt als ich den Thread machte ich wollte eigentlich ins c++ Forum. Kann ja Mal passieren und so falsch bin ich hier auch nicht!
-
Kevinus schrieb:
und wie teile ich das dem compiler mit das der Zeiger einen int Wert zum Beispiel enthalten soll? Vll mit casten?
Genau so:
int myfunc(void* data) { // ich weiß, daß data auf einen int-Wert zeigt: int* idata = (int*)data; return *idata * *idata; //nur als Beispiel - so greift man auf die Daten zu }
-
thx für die Hilfe!