Seite 1 von 2

WinAPI

Verfasst: 29.08.2005 13:25
von sobi
Hallo,

*peinlich* - doofe Frage:
Auf dem Rechner meiner Freundin (XP) habe ich PB installiert. Allerdings funktionieren die WinAPI Funktionen nicht so, wie auf meinem Rechner (Win98)
Woran liegt das?
Liebe Grüße,

Simon

api

Verfasst: 29.08.2005 13:31
von roherter
wahrscheinlich daran das bei xp die api viel mehr funktionen enthält als windows 98! :roll:

Re: api

Verfasst: 29.08.2005 13:36
von sobi
roherter hat geschrieben:wahrscheinlich daran das bei xp die api viel mehr funktionen enthält als windows 98! :roll:
Aber was ich auf win98 gemacht habe, läuft auf winXP fehlerhaft.

Re: api

Verfasst: 29.08.2005 13:53
von Kiffi
> Aber was ich auf win98 gemacht habe, läuft auf winXP fehlerhaft.

kannst Du mal ein konkretes Beispiel nennen? Dann könnten wir schauen, ob
sich bei dem entsprechenden Aufruf zwischen beiden System was verändert
hat.

Grüße ... Kiffi

Re: api

Verfasst: 29.08.2005 17:21
von sobi
Kiffi hat geschrieben:kannst Du mal ein konkretes Beispiel nennen? Dann könnten wir schauen, ob sich bei dem entsprechenden Aufruf zwischen beiden System was verändert hat.
Im Moment habe ich nur noch einen Fehler:

Code: Alles auswählen

    Buffer.s=Space(40) 
    GetObject_(GetClassLong_(WindowID(),#GCL_HBRBACKGROUND),40,@Buffer.s) 
    farbe.l=PeekL(@Buffer.s+4)
Damit lese ich (zumindest unter Win98) ganz erfolgreich die Hintergrundfarbe aus.
Grüße
Simon

Verfasst: 29.08.2005 17:49
von ts-soft

Code: Alles auswählen

BufferLength = GetObject_(GetClassLong_(WindowID(),#GCL_HBRBACKGROUND),0,@Buffer)
*Buffer = AllocateMemory(BufferLength) 
GetObject_(GetClassLong_(WindowID(),#GCL_HBRBACKGROUND),BufferLength,*Buffer)
so in etwa sollte es gehen, nicht einfach 40 als Buffer, sondern die Länge ermitteln. Nachher den Speicher wieder freigeben nicht vergessen

Verfasst: 30.08.2005 07:25
von hardfalcon
@ts-soft: Hab zwar grad kein PB zur Hand, aber kann man mit den aktuellen PB-Versionen überhaupt noch Memory freigeben? Ich dachte, die Memory-Nummern (also z.B. #Memory) seien schon vor längerer Zeit abgeschafft worden, und PB würde das jetzt alles automaisach besorgen... Bitte korrigiert mich, wenn ich falsch liege...

//EDIT: ach nee, hab grad auf PureArea.net nachgeschaut, FreeMemory(*MemoryID) gibts trotzdem. Wundert mich aber, wie er da die Länge des zu freeenden Buffers rausfinden will... früher war das doch immer FreeMemory(#Memory), oder etwa nicht? :?

Verfasst: 30.08.2005 09:55
von ts-soft
Zum freigeben benutzt Du den MemoryPointer von AllocateMemory

Code: Alles auswählen

MyMemory = AllocateMemory(100)
; tu was
FreeMemory(MyMemory) 

; oder so
*MyMemory = AllocateMemory(100)
; tu was
FreeMemory(*MyMemory) 

Verfasst: 30.08.2005 11:10
von Lebostein
Wie kann ich eigentlich anhand des Memory-Pointers die Größe des dazugehörigen Speicherbereiches ermitteln? Geht das irgendwie? (Aber bitte nicht mit der Antwort kommen: "Naja, du musst die Größe ja beim Allocieren angben, wozu willst du sie dann noch ermitteln?")

Verfasst: 30.08.2005 12:14
von ts-soft

Code: Alles auswählen

MyMemory = AllocateMemory(100)
; tu was
Debug GlobalSize_(MyMemory)
FreeMemory(MyMemory)

MEM = AllocateMemory(100)
Debug GlobalSize_(MEM)
MEM = ReAllocateMemory(MEM, 200)
Debug GlobalSize_(MEM)
FreeMemory(MEM)
Debug GlobalSize_(MEM)
FreeMemory(-1)
Debug GlobalSize_(MEM)
:wink:
Das zweite Beispiel verdeutlicht, was es mit FreeMemory in PB so auf sich hat :mrgreen: