WinAPI

Anfängerfragen zum Programmieren mit PureBasic.
sobi
Beiträge: 170
Registriert: 05.02.2005 23:41
Wohnort: passau
Kontaktdaten:

WinAPI

Beitrag 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
Sorgen sind wie Blumen, wenn man sie nicht gießt, gehen sie ein.
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

api

Beitrag von roherter »

wahrscheinlich daran das bei xp die api viel mehr funktionen enthält als windows 98! :roll:
Purebasic 5.0 32bit und 64 bit

I'm back from hell
sobi
Beiträge: 170
Registriert: 05.02.2005 23:41
Wohnort: passau
Kontaktdaten:

Re: api

Beitrag 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.
Sorgen sind wie Blumen, wenn man sie nicht gießt, gehen sie ein.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: api

Beitrag 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
a²+b²=mc²
sobi
Beiträge: 170
Registriert: 05.02.2005 23:41
Wohnort: passau
Kontaktdaten:

Re: api

Beitrag 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
Sorgen sind wie Blumen, wenn man sie nicht gießt, gehen sie ein.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag 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? :?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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) 
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag 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?")
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten