wie int nach LPDWORD konvertieren
-
Ich habe einen integer (int value) den ich für einen DLL Aufruf nach
LPDWORD konvertieren muss.
Ich mache dazu folgendes:LPDWORD number = static_cast<LPDWORD>(&value);
was mir aber nur den folgenden Fehler gibt:
error: invalid static_cast from type 'int*' to type 'DWORD*'
wie konvertiere ich nun richtig?
-
du willst anders als im Titel steht nicht ein int konvertieren, sondern einen Zeiger auf int. Das ist ein ziemlicher Unterschied.
Du müsstest ein DWORD nehmen, den Wert des int hinenkopieren und den Zeiger auf das DWORD benutzen. Oder an Stelle des int gleich ein DWORD benutzen, das hängt davon ab wie du das alles verwenden willst.
-
Ich mache es jetzt so:
DWORD number = static_cast<DWORD>(value); LPDWORD pnumber = & number; ... ... value = static_cast<int>(*pnumber);
sieht nur nicht schön aus.
-
Dann verwende doch gleich
DWORD
als Typ fürvalue
.
-
pospiech schrieb:
sieht nur nicht schön aus.
Stimmt. Aber was anderes bleibt dir nicht wenn du einen in/out-Parameter in einen anderen typen hin- und wieder zurück-konvertieren willst/musst...
-
krümelkacker schrieb:
Dann verwende doch gleich
DWORD
als Typ fürvalue
.Die DLL verwendet ausschießlich Werte im WinAPI Stil.
Der Rest des Projektes ist ausschießlich Qt, wo ein DWORD Typ unpassend ist.
-
Dann nimm eben einen
unsigned long
, ist nämlich das Gleiche wie ein DWORD.Grüssli
-
Dravere schrieb:
Dann nimm eben einen
unsigned long
, ist nämlich das Gleiche wie ein DWORD.Grüssli
Muss aber nicht das gleiche bleiben.
Ich würde daher grundsätzlich davon ausgehen dass es zwei verschiedene Typen sind und die Hin- und Rückkonvertierung wie gehabt machen. Sich darauf festzulegen, dass DWORD immer unsigned sein muss, würde der Entkoppelung, die der DWORD-typedef bewirkt entgegenwirken.
-
pumuckl schrieb:
Muss aber nicht das gleiche bleiben.
Ich würde daher grundsätzlich davon ausgehen dass es zwei verschiedene Typen sind und die Hin- und Rückkonvertierung wie gehabt machen. Sich darauf festzulegen, dass DWORD immer unsigned sein muss, würde der Entkoppelung, die der DWORD-typedef bewirkt entgegenwirken.Ich persönlich würde ja einfach
DWORD
selber verwenden, aber da er sich so dagegen wehrt, würde ich doch eher meinen Vorschlag bevorzugen. Er verwendet schliesslichint
undDWORD
, da gibt es bereits eine mögliche Inkompatibilität. Falls sichDWORD
tatsächlich ändert, könnte dies womöglich nicht mal auffallen wegen demstatic_cast
. Mit der Verwendung vonunsigned long
würde aber sofort ein Kompilerfehler beim Aufruf entstehen und man könnte auf die Änderung vernünftig reagieren.Grüssli
-
Nur zur Info: Die Zahl die abgefragt wird liegt sowieso nur zwischen 0 und 1024.
-
Dravere schrieb:
Ich persönlich würde ja einfach
DWORD
selber verwendenIch nicht. Wenn ein Framework irgendeinen eigenen Typ oder typedef einführt, benutze ich ihn genau an der Grenze zu diesem Framework und sonst nirgends. Andernfalls müsste ich den Header des Frameworks an Stellen einbinden wo er nichts zu suchen hat, nur um den typedef bekannt zu machen, oder aber selber typedeffen was bei Änderungen des originalen typedef erst recht zu Murks führt. Typen aus einer der Betriebssystem-APIs haben in der GUI nichts zu suchen. Stichwort Erweiterbarkeit und unnötige Abhängigkeiten vermeiden.