Array Pointer?
Übersicht

#ReaperNewsposterBetreff: Array Pointer? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
hab in dieser Richtung leider kaum erfahrung, und weiß einfach nicht, wie ich es richtig machen muss. Ich versuche die Funktion GetKeyboardState aus der Win32-Lib zu includen. Mein Ansatz Code: [AUSKLAPPEN] Extern "Win32"
Function GetKeyboardState:Byte(lpKeyState:Byte Ptr) End Extern Ich bin sehr davon überzeugt, das sogar das schon falsch ist. ![]() Wie ich dann das Array der Funktion übergeben muss, weiß ich leider auch nicht genau. Habe schon mehreres Versucht, aber noch keine Rückgaben erlangt ![]() Habe mir zwar schon das Tutorial zu Pointern hier durchgelesen, hat mir da aber auch noch nicht so sehr geholfen ![]() Würde mich über Antworten freuen, danke ![]() MfG #Reaper |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Die Definition ist richtig, hier mal ein Beispiel wie man die Funktion in BlitzMax aufrufen kann: Code: [AUSKLAPPEN] SuperStrict
Extern "Win32" Function GetKeyboardState:Byte(lpKeyState:Byte Ptr) End Extern Graphics 800, 600, 0 'Neues Array erstellen, in dieses werden die Werte übertragen Local Keys:Byte[] = New Byte[256] GetKeyboardState(Keys) 'Variable zum Beenden des Programms Local quit:Int = 0 'Hauptschleife While quit = 0 Cls 'Tastaturstatus abfragen und die Werte in das Array Keys schreiben '(Keys ohne Indexierung ist im Grunde ein Byte Ptr, 'deshalb muss hier gar nichts konvertiert werden) GetKeyboardState(Keys) 'Alle Tasten im Keys-Array durchgehen For Local key:Int = 0 To 255 'Prüfen ob eine Taste gedrückt wurde '(Laut msdn ist in dem Fall das höchste Bit 1, 'daher auf 128 (Binär 1000 0000) prüfen) If Keys[key] & 128 Then quit = 1 Next If KeyHit(KEY_ESCAPE) Then quit = 1 Flip Wend EndGraphics End Allerdings scheint es nur zu funktionieren wenn gleichzeitig auch noch eine KeyHit-Abfrage von BMax im Programm ist. Ohne die KeyHit-Zeile funktioniert es bei mir nicht richtig. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Macht auch keinen Sinn denn das BM fenster fängt genau diese Daten bereits ab und speichert sie in einen internen Array. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sollte eigentlich komplett ohne Graphics funktionieren.
Wenn man schon Tasten drückt, bevor man das Progg startet, funktioniert es. Aber die Keys bleiben dauerhaft im Array als gedrückt. :-/ Stimmt doch was mit dem Pointer nicht? Danke schonmal für eure Hilfe! ![]() |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schon versucht das array vor auslesen zu leeren ? | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie meinst du das genau, mit leeren? Hab mit einer Schleife alles immer auf 0 setzten lassen, und habe es mal in eine locale Variable in einer Funktion schreiben lassen, und dann in eine Globale geschrieben. Hat aber auch nichts gebracht.
Seltsammerweise liefert die Funktion nur einmal ein richtige Rückgabe, und zwar wenn man vor dem Programmstart bereits eine Taste drückt. Danach bleibt die Taste aber angeblich als gedrückt im Array, bzw. setzt die Funktion scheinbar immer wieder das Selbe in das Array zurück (was ja längst nicht mehr stimmt) :-/ Ein wenig unordentlicher Code: Code: [AUSKLAPPEN] SuperStrict
Extern "Win32" Function GetKeyboardState:Byte(lpKeyState:Byte Ptr) End Extern 'Graphics 800, 600, 0 'Neues Array erstellen, in dieses werden die Werte übertragen Global Keys:Byte[256]' = New Byte[256] 'Print GetKeyboardState(Keys) 'Variable zum Beenden des Programms Local quit:Int = 0 'Hauptschleife While quit = 0 'Cls 'Tastaturstatus abfragen und die Werte in das Array Keys schreiben '(Keys ohne Indexierung ist im Grunde ein Byte Ptr, 'deshalb muss hier gar nichts konvertiert werden) getkey() 'Alle Tasten im Keys-Array durchgehen For Local key:Int = 0 To 255 'Prüfen ob eine Taste gedrückt wurde '(Laut msdn ist in dem Fall das höchste Bit 1, 'daher auf 128 (Binär 1000 0000) prüfen) If Keys[key] & 128 Then 'quit = 1 Print "! "+key EndIf Next Delay 10 'If KeyHit(KEY_ESCAPE) Then quit = 1 'Flip For Local i:Int=0 To 255 Keys[i]=0 Next Wend 'EndGraphics End Function getkey() Local lKeys:Byte[256]' = New Byte[256] If GetKeyboardState(lKeys)=0 Then Print "GetKeyboardState-Error" Keys = lKeys[..] End Function |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group