Juniors WorkstationLidos BerlinComputer PassDies und Das
Nutzungsbedingungen    Datenschutz    Impressum       Kontakt        Registrieren       <== zurück zur Startseite    
 
  Lernen durch Lehren
 
  LDL - Wissenswertes
  LDL - Hardwaretests
  LDL - Softwaretests
  LDL - Tipps & Tricks
  LDL - Workshops
 


  Profan² Einsteiger FAQ 7.5
 
  Profan² Einsteiger FAQ 7.5
  Profan² an die Schulen
  Profan² Script - FAQ
  Profan² Erweiterungen
  Profan² Helferlein
  Profan² Quellcode
 


  HTML Einsteiger FAQ 4.07
 
  HTML Einsteiger FAQ 4.07
  HTML indirekte Fragen
  kleine JavaScript FAQ
 


250 MB mit PHP / MySQL
 
Sie suchen noch Webspace, der kosten- und werbefrei ist, PHP (5.x) und MySQL (3.x) unter- stützt ...

Sie haben Fragen und benötigen Antworten
 
Das verstehen wir - und genau aus diesem Grund haben wir versucht, auf Ihre (am häu- figsten) gestellten Fragen zu antworten.
 
Lern- und Lehrbereich: Juniors Workstation
 
   einen Beitrag auswählenzum Anfang eine Seite zurück  eine Seite vor zum Ende     
   Bereich Kennung Zuordnung Klick Titel 
11  Workstation FAQ Profan Profan-FAQ81264  Profan² - eine Programmiersprache Profan-FAQ - Profan² - eine Programmiersprache
12  Workstation FAQ Profan Profan-FAQ34104  Profan² - dieser Name steht für ein Programmiersystem Profan-FAQ - Profan² - dieser Name steht für ein Programmiersystem
13  Workstation FAQ Profan Profan-FAQ36101  Profan² - eine Scriptsprache Profan-FAQ - Profan² - eine Scriptsprache
14  Workstation FAQ Profan Profan-FAQ36110  Profan² - eine Datenbank-Sprache Profan-FAQ - Profan² - eine Datenbank-Sprache
15  Workstation FAQ Profan Profan-FAQ33701  Profan² - Versionen im Download Profan-FAQ - Profan² - Versionen im Download
16  Workstation FAQ Profan Profan-FAQ37014  Was sind Ereignisse? Profan-FAQ - Was sind Ereignisse?
17  Workstation FAQ Profan Profan-FAQ34761  Was ist eine Multimedia-Schnittstelle? Profan-FAQ - Was ist eine Multimedia-Schnittstelle?
18  Workstation FAQ Profan Profan-FAQ39800  Was ist und enthält eine Windows-Nachricht? Profan-FAQ - Was ist und enthält eine Windows-Nachricht?
19  Workstation FAQ Profan Profan-FAQ35378  Definitionen, Funktionen und Operatoren unter Profan² Profan-FAQ - Definitionen, Funktionen und Operatoren unter Profan²
33  Workstation FAQ Profan Profan-FAQ38127  Einiges über Variablen und Platzhalter ... Profan-FAQ - Einiges über Variablen und Platzhalter ...

135 registrierte Beiträge gefunden; davon werden aktuell 10 angezeigt. 

 
   Bereichsvariablen und API aufrufen?

Bisher kaum genutzt wird die Möglichkeit, ab Profan² 6.1 API-Aufrufe ohne Bereichsvariablen vorzunehmen. Dazu dient die Funktion @Addr, die einen Pointer (Zeiger) auf eine vom Profanprogramm genutzte "normale" Variable zurückgibt.

Dieser LongInt-Wert läßt sich bei API-Aufrufen anstelle einer Bereichsvariablen verwenden. Dies klappt sowohl bei der Übergabe an die Funktion, als auch bei der "Abholung" von Ergebnissen:

Man erzeugt einen String bestimmten Inhalts oder bestimmter Länge (entsprechend der Dimensionierung einer Bereichsvariablen) und übergibt dann den Pointer auf diesen String an die Funktion, die den Inhalt des Strings übernimmt und/oder überschreibt.

Dabei ist zu beachten, daß bei Strings das 1. Byte des Bereiches, auf den @addr zeigt, die Länge des Strings enthält, also bei der Übergabe des Pointers übersprungen werden muß.

Außerdem muß man selbst dafür sorgen, daß der String mit einem Chr$(0), also einem NullByte endet:

   window 50,50-400,400
   def @SetWindowText(2) !"USER32","SetWindowTextA"
   declare Titel$
   let Titel$="Dies ist der Titel";@chr$(0)
              " Stringende wird mit NullByte markiert
 
   declare Pointer&
   let Pointer&=@addr(Titel$)
             " Zeiger auf String im Speicher ermitteln
  
   let Pointer&=@add(Pointer&,1)
             " Pointer + 1
       " ( 1. Byte des ermittelten Bereichs überspringen )
   setwindowtext(%hwnd,Pointer&)
   waitinput

Ebenso muß man bei der Auswertung eines zurückgegebenen Strings ebendieses NullByte "von Hand" wieder abschneiden bzw. den String am NullByte trennen:

   window 50,50-400,400
   def @GetWindowText(3) !"USER32","GetWindowTextA"
   declare Titel$
   let Titel$=@space$(255)
       " String anlegen; äquivalent zu DIM
   declare Pointer&
   let Pointer&=@addr(Titel$)
       " Zeiger auf String im Speicher ermitteln
   let Pointer&=@add(Pointer&,1)
       " Pointer + 1
       " ( 1. Byte des ermittelten Bereichs überspringen )
   @GetWindowText(%hwnd,Pointer&,255)
       " 3. Parameter: maximal erwartete Zeichen
   let Titel$=@substr$(Titel$,1,@chr$(0))
       " String am NullByte auftrennen
   print Titel$
   waitinput

Allerdings akzeptieren nur API-Aufrufe und Message-Funktionen diese Möglichkeit. Andere Funktionen, die auf Bereichsvariablen zugreifen wie String und @String$() oder auch Word und @Word() würden Fehlermeldungen erzeugen.

©2012 Lidos Berlin - alle Rechte vorbehalten.