002
13.05.2004, 12:13 Uhr
ao
(Operator)
|
Zitat: |
Unwissende postete
C++: |
void msp2_brd::Info(HANDLE* hwd, UINT32* adr, UINT32* rng) { *hwd = pci_hd; *adr = (UINT32) base_address; *rng = range; }
|
C++: |
board_2[mod_nr].Info(&hWD, &val, &size);
|
|
Wenn das so glatt kompiliert, dann sind hWD und size keine Pointer, sondern ein HANDLE bzw. ein UINT32. Du benutzt die Info-Funktion, um hWD, val und size mit Daten aus der Board-Klasse zu belegen, richtig?
Zitat: |
Kann ich das einfach SO machen:
C++: |
hWD=dez_adr; size=file_pointer;
|
|
Wenn dez_adr und file_pointer tatsächlich Zeiger sind, müsste das Compilerfehler geben.
Du willst hier diese Daten überschreiben mit etwas, das in dez_adr bzw. in file_pointer steht? Versteh ich nicht, wozu hast du sie dann erst mit Info() abgeholt? Was steht denn in diesen Variablen drin? Was soll danach passieren?
Das hWD scheint ein Geräte-Handle zu sein, das eigentlich nur im Zusammenhang mit irgendwelchen Windows-API-Funktionen Sinn macht. Das lässt man sich vom Betriebssystem geben und macht dann was damit, z.B. Gerätedaten abfragen oder irgendwelche Aktionen auf dem Gerät anstoßen.
Und size = file_pointer klingt auch irgendwie suspekt, das passt nicht zusammen. Das ist so wie Länge = 25 Liter.
Zitat: |
Irgendwie komm ich mit dem &hWD und &size nicht klar....
|
Der &-Operator bildet die Speicheradresse der Variablen. Indem du die Adresse der Variablen an eine Funktion (Info) übergibst und die Funktion an diese Adresse etwas schreibt, kannst du Daten aus der Funktion nach außen transportieren (call-by-reference-Prinzip).
Aber was anderes: Ich hab im Gedächtnis, dass es um Speichertest geht. Fragst du diese Daten aus der Board-Klasse ab, um die Speichertest-Funktion damit zu füttern? Warum machst du den Speichertest nicht zu einer Methode der Board-Klasse, dann könnte das Board seinen eigenen Speicher testen?
Das würde es dir ersparen, diese Innereien kreuz und quer durchs Programm zu transportieren; so was macht nämlich Probleme, wenn die einmal rausgereichten Daten irgendwann nicht mehr gültig sind. Wenn die Board-Klasse das alles selbst machen würde, wüsste sie immer genau, welche Daten aktuell sind; ein Externer hat so gut wie keine Chance, das festzustellen.
ao |