WinApi: __out LPRECT lpRect
Übersicht

![]() |
das wurgelBetreff: WinApi: __out LPRECT lpRect |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Extern "Win32"
Function WINAPI_GetWindowRect:Int(hwnd:Int, lpRect:Byte Ptr Var)="GetWindowRect@8" End Extern Jetzt kriege ich bei lpRect zwar einen Pointer zurück, wenn ich ihn aber versuche durch indexen zu dereferenzieren, kommt eine Meldung "EXEPTION_ACESS_VIOLATION". Wie komm ich daran? Kann man das irgendwie mit ner Bank machen oder so? |
||
1 ist ungefähr 3 |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe zwar keine so große Ahnung, woran es nun wirklich liegt, aber hier ein paar Anregungen:
Funktioniert "Byte Ptr Var"? Teste einmal "Byte Ptr Ptr"! (Denke daran, dass die Byte-Pointer-Variable mit "Varptr" übergeben wird!) Das, was da zurückgegeben wird, hat diese Struktur: Code: [AUSKLAPPEN] typedef struct _RECT {
LONG left; LONG top; LONG right; LONG bottom; } RECT, *PRECT; Deklariere einen entsprechenden Extern-Type. (Es wäre zumindest einen Versuch wert.) Eine andere potentielle Fehlerquelle: Wie liest du die Daten aus? Ansonsten fällt mir gerade nichts ein. mfG mpmxyz PS: Banks sind in BlitzMax im Gegensatz zu BB/B3D übrigens keine Wundermittel mehr, sondern einfach nur Objekte mit einem Byte-Pointer. ![]() |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Extern "Win32"
Function WINAPI_FindWindow:Int(lpClassName:Byte Ptr, lpWindowName:Byte Ptr)="FindWindowA@8" Function WINAPI_GetWindowRect:Int(hwnd:Int, lpRect:Byte Ptr Ptr)="GetWindowRect@8" End Extern Local hWnd% = WINAPI_FindWindow(Null, "Rechner") Print Hex(hWnd)Local lpRect:Byte Ptr WINAPI_GetWindowRect(hWnd, Varptr lpRect) Print Hex(Int(lpRect)) Print lpRect[0] ' EXEPTION_ACESS_VIOLATION Jetzt bekomme ich einen Pointer auf einen Pointer der beim indexen eine Fehlermeldung macht. Ich dachte ich könnte auf diese Weise die Werte aus der Rect-Struktur auslesen. |
||
1 ist ungefähr 3 |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wir hatten einen Denkfehler: structs werden an Ort und Stelle gespeichert.
Ein Pointer auf eine struct-Variable ist demnach ein Pointer auf einen Speicherbereich. BlitzMax: [AUSKLAPPEN] Strict mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke mpmxyz! Jetzt verstehe ich meinen Fehler. | ||
1 ist ungefähr 3 |
![]() |
Suco-XBetreff: ..... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi.
Sowas wie in dem Beispiel unten geht natürlich auch. Sieht vielleicht etwas sauberer aus. Code: [AUSKLAPPEN] Strict Extern "Win32" Function WINAPI_FindWindow:Int(lpClassName:Byte Ptr, lpWindowName:Byte Ptr)="FindWindowA@8" Function WINAPI_GetWindowRect:Int(hwnd:Int, lpRect:Byte Ptr)="GetWindowRect@8" Function WINAPI_Desktop()="GetDesktopWindow@0" End Extern Type TRect Field x:Int Field y:Int Field w:Int Field h:Int End Type Local hWnd:Int = WINAPI_Desktop() Local rect:TRect = New TRect WINAPI_GetWindowRect(hWnd, Byte Ptr(rect)) Print rect.x Print rect.y Print rect.w Print rect.h Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dass BlitzMax-Types dazu kompatibel sind wusste ich garnicht.
Noch ein paar Fragen: Woher weiß ich, dass ein LONG ein 32bit Integer ist? Kann ich davon ausgehen, dass das immer so ist? Wo finde ich die Header-Datei, in der das definiert ist? |
||
1 ist ungefähr 3 |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier sind die Definitionen der Typen, die auf msdn verwendet werden: http://msdn.microsoft.com/en-u...85%29.aspx
LONG ist wahrscheinlich deshalb 32 Bit lang, weil der gleichnamige C Typ long auch 32 Bit lang ist. mfg Thunder |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group