Deutsch
Forum

nproc / sizeof / DrawText / Strukturen

 

Ernst
warum meckert XPSE bei der Funktion sizeof  in einer nproc
( Warnung: undeklarierte Funktion : SIZEOF )
auch {$pushkeyword sizeof} hilft nicht
 
05.05.2014  
 




E.T.
An welcher Stelle im Quelltext steht denn das {$pushkeyword sizeof}  ??
 
XProfan X2
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
05.05.2014  
 




Ernst
als Kompilerschalter am Anfang

{$iq}
{pushkeyword sizeof}

bzw.

{pushkeyword sizeof}
{$iq}

beides versucht - Ergebnis gleich
----------
anschließend kommen gleich noch zwei Fragen betreffend Drawtext und Strukturen...

bei dem Versuch die API ~DRAWTEXT zu verwenden, gibt es aufgrund der xpse-eigenen Funktion die
Warnung: Funktion DRAWTEXT erwartet bei Parameter 4.
Funktion: WNDPROC
Abhilfe: STR
 
kann man die API-Funktion irgendwie reindrücken oder kann man nur auf Umwegen zum Ziel (Textausrichtung , etc.) kommen ?

zum zweiten, z.B. Paintstruct: egal wie ich versuche die Struktur reinzubekommen ist die Meldung da
Warnung: "PAINTRUCT" : Kollision mit Struktur (PAINTSTRUCT) 
wenn xpse die verschiedenen Strukturen schon kennt, wie verwende ich sie dann richtig ?
Grüße
 
05.05.2014  
 




Nico
Madysa
Ernst (05.05.14)

warum meckert XPSE bei der Funktion sizeof in einer nproc
( Warnung: undeklarierte Funktion : SIZEOF )
auch {$pushkeyword sizeof} hilft nicht


Innerhalb von NProcs darfst du nur selbst definierte Funktionen verwenden und solche, die von XPSE für NProcs bereit gestellt werden. Du darfst nicht davon ausgehen, dass alle XProfan-Funktionen innerhalb von NProcs wie gewohnt funktionieren.

Wenn du in die XPSE-Funktionsreferenz [...]  schaust, wirst du feststellen, dass der Befehl nicht existiert.

Ich nehme an, dass du die Größe in Bytes einer Bereichsvariablen haben willst. In dem Falle ist es besser, GlobalAlloc  [...]  zu verwenden, die erhaltene Adresse in einer Longvariablen zu speichern und diese dann wie eine Bereichsvariable zu verwenden. Dispose  wird dann durch GlobalFree  [...]  ersetzt, SizeOf  durch GlobalSize  [...] .
KompilierenMarkierenSeparieren
 $H Window.ph

nproc DoATest

    parameters value&
    var mem& = GlobalAlloc(~GPTR, 4)
    SetLong(mem&, 0, value&)
    var returnValue& = GetLong(mem&, 0)
    GlobalFree(mem&)
    return returnValue

endproc

cls
print "Ergebnis:", DoATest(42)
'Ergebnis: 42
waitinput
end

Ernst (05.05.14)

bei dem Versuch die API ~DRAWTEXT zu verwenden, gibt es aufgrund der xpse-eigenen Funktion die
Warnung: Funktion DRAWTEXT erwartet bei Parameter 4.
Funktion: WNDPROC
Abhilfe: STR
kann man die API-Funktion irgendwie reindrücken oder kann man nur auf Umwegen zum Ziel (Textausrichtung , etc.) kommen ?


Ich bin mir nicht mehr ganz sicher, aber es sollte klappen, wenn du statt DrawText  ~DrawText  schreibst.

Ernst (05.05.14)

zum zweiten, z.B. Paintstruct: egal wie ich versuche die Struktur reinzubekommen ist die Meldung da
Warnung: "PAINTRUCT" : Kollision mit Struktur (PAINTSTRUCT)
wenn xpse die verschiedenen Strukturen schon kennt, wie verwende ich sie dann richtig ?
Grüße


So:
KompilierenMarkierenSeparieren
Ich glaube, XPSE erlaubt es dir, die Tilde wegzulassen. Wichtig ist aber, dass der Strukturname nicht mit der Headerkonstanten PAINTSTRUCT  kollidiert. Ich nehme an, dass das das Problem ist.
 
06.05.2014  
 




Ernst
@Nico - funkt leider nicht
die APIs schreibe ich gewohnheitsmäßig immer mit der Tilde; da man aber diese in xpse weglassen kann, liegt vieleicht eben darin das Problem. xpse kann dadurch sichtlich nicht zwischen eigenem drawtext und api-drawtext unterscheiden und will nur 4 Parameter. gibts dafür vielleicht einen workaround ?

betreffend der Strukturen habe ich unter anderem auch genau diese Variante schon versucht - negativ, aber nun ist es mir klar warum; ich hab's innerhalb einer nProc versucht.

sizeof  -Problem: habe ich dich da richtig verstanden, dass $pushkeyword bei nProcs keinen Einfluss hat, und ebenn nur selbst definierte, xpse-eigenen und api-Funktionen angewendet werden können - gibt es eigentlich für sizeof eine adäquate (kurze) api-Funktion ?
Gruß Ernst
 
06.05.2014  
 




E.T.

{$iq}
{pushkeyword sizeof}


Schon mal mit

{$iq}
{$pushkeyword sizeof}

versucht
 
XProfan X2
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
06.05.2014  
 




Ernst
@E.T.
war nur ein Schreibfehler
habe es schon mit {$pushkeyword sizeof} versucht (siehe meine erste Frage)

Nachtrag @Nico
Mir ist nun klar, warum es nicht funktioniert hat, weil ich dies alles innerhalb
einer nProc unterbringen wollte - geht halt nicht.
"workaround" für Textausrichtung habe ich mir bereits erledigt.
 
06.05.2014  
 




Nico
Madysa
Ernst (06.05.14)
sizeof -Problem: habe ich dich da richtig verstanden, dass $pushkeyword bei nProcs keinen Einfluss hat, und ebenn nur selbst definierte, xpse-eigenen und api-Funktionen angewendet werden können


Die Kompilerdirektive PUSHKEYWORD existiert aus Kompatibilitätsgründen und versichert XPSE, dass eine gewisse Funktion vorhanden ist, obwohl sie XPSE nicht bekannt ist -- zum Beispiel, weil die Funktion erst in einer neueren XProfan-Version eingebaut worden ist.

Innerhalb von NProcs darfst du aber keine XProfan-Funktionen verwenden. Verwenden kannst du nur WinAPI-Funktionen und Funktionen, die in der XPSE-Referenz [...]  definiert sind. Du siehst sicherlich, dass da manches fehlt.

Ernst (06.05.14)
gibt es eigentlich für sizeof eine adäquate (kurze) api-Funktion ?
Gruß Ernst


Ja, GlobalSize . Das Problem ist, dass ich nicht weiß, ob GlobalSize etwas mit XProfan-eigenen Bereichsvariablen anzufangen weiß. Das ist der Grund dafür, dass ich empfohlen habe, innerhalb von NProcs grundsätzlich nur mit GlobalAlloc  erstellte Speicherbereiche zu verwenden. Sie bieten eine nahezu gleiche Funktionalität und ich kann mich darauf verlassen, dass sie machen, was sie sollen.
 
08.05.2014  
 




Findus
Ernst (06.05.14)
@Nico - funkt leider nicht
die APIs schreibe ich gewohnheitsmäßig immer mit der Tilde; da man aber diese in xpse weglassen kann, liegt vieleicht eben darin das Problem. xpse kann dadurch sichtlich nicht zwischen eigenem drawtext und api-drawtext unterscheiden und will nur 4 Parameter. gibts dafür vielleicht einen workaround ?


In diesem Fall liegt das eher daran das es die Funktion auch nochmal als xpse Funktion gibt direkt von xpse: [...] 

Da ist der 4. parameter ein string.

Wenn Du zentrierten text willst usw dann kannst du ja mal die drawtextex api verwenden denn die geht gut dafür.

Statt globalfree usw würde ich die xpse funktionen nehmen die wie die xprofan funktionen lauten also dim und dispose, die gehen auch in nprocs und sind da auch gelistet. [...] 
 
09.05.2014  
 




Ernst
Findus (09.05.14)
Wenn Du zentrierten text willst usw dann kannst du ja mal die drawtextex api verwenden denn die geht gut dafür.

genau das ist’s (ich war zu stark auf drawtext fixiert) – Danke
Findus (09.05.14)
Statt globalfree usw würde ich die xpse funktionen nehmen die wie die xprofan funktionen lauten also dim und dispose, die gehen auch in nprocs und sind da auch gelistet.

dim und dispose verwende ich ohnedies, aber mir ging/geht es um das sizeof 
normalerweise würde ich schreiben
textlen& = ~GetWindowText(hWnd&, Text#, sizeof(#)-1)
aber wie mach ich es in einer nproc, die sizeof nicht kennt – und eine passende api hab ich auch nicht gefunden
 
09.05.2014  
 




Nico
Madysa
Findus (09.05.14)
Statt globalfree usw würde ich die xpse funktionen nehmen die wie die xprofan funktionen lauten also dim und dispose, die gehen auch in nprocs und sind da auch gelistet. [...] 


Hoppla, da hab ich getrieft und die Referenz nicht richtig gelesen.

Ernst (09.05.14)
dim und dispose verwende ich ohnedies, aber mir ging/geht es um das sizeof
normalerweise würde ich schreiben
textlen& = ~GetWindowText(hWnd&, Text#, sizeof(#)-1)
aber wie mach ich es in einer nproc, die sizeof nicht kennt ? und eine passende api hab ich auch nicht gefunden


Ich kann mir sehr gut vorstellen, dass XPSEs Dim- und Dispose-Funktionen nur Wrapper um GlobalAlloc und GlobalFree sind.
Schau doch einfach mal, ob der folgende Code das erwartete Ergebnis ausgibt:
nproc TestGlobalSize

    parameters sizeOfMem&
    var mem& = Dim(sizeOfMem&)
    var result& = GlobalSize(mem&)
    Dispose(mem&)
    return result&

endproc

proc assert

    parameters param&
    print param&,
    print if(TestGlobalSize(param&) = param&, "OK", "Fail!")

endproc

cls
assert(4)
assert(23)
assert(42)
waitinput
end
 
10.05.2014  
 




Ernst
Schreibfehler:
textlen& = ~GetWindowText(hWnd&, Text#, sizeof(#)-1) sollte sein:
textlen& = ~GetWindowText(hWnd&, Text#, sizeof(Text#)-1)

@Nico: jedenfalls ist globalsize  exakt die api, die ich gesucht hatte.
long text=dim(255)
var textlen& = ~GetWindowText(hWnd&,Text,~GlobalSize(Text)-1)
Danke
 
10.05.2014  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

20.691 Betrachtungen

Unbenanntvor 0 min.
p.specht05.12.2017
Ernst24.06.2016
Wilfried02.06.2016
funkheld11.04.2016
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie