+1 800 256 3608 (toll-free in North America) or +49 7531 90 60 10| service@combit.com

L&L 14 und xBase++: Abfrage von Variablenwerten


(Guest) #1

Hallo,

habe folgendes Problem: Ich möchte aus einem Projekt, das Benutzer-Variablen
besitzt, deren Wert auslesen und im Programm auswerten. Das Programm soll,
je nach Wert der Benutzervariable in der Projektdatei andere Daten an L&L
senden.

Ich hatte es zunächst mit numerischen Variablen versucht, aber ohne Erfolg:

Im Projekt eine Benutzervariable angelegt und mit dem Wert -1- belegt.

Im Programm folgende Zeilen (nach dem Laden der Projektdatei!):

nBuffer := 0
nRet := LlGetVariableType(LL_Job,"@MYUSERVAR")
IF nRet = LL_NUMERIC
nRet := LlGetUserVariableContents(LL_JOB,"@MYUSERVAR",@nBuffer,1)
ENDIF

nRet ist immer -44, also Fehler Buffer zu klein. Vergrößerung des für
Buffergröße vorgesehenen 4. Parameters in llGetUserVariableContents auf 2
und schrittweise bis 19 brachte keine Änderung. Bei 20 kam es zum
Programmabsturz.

Habe es dann mit einer Textvariable versucht:

Im Projekt eine Benutzervariable angelegt und mit dem Wert “V” belegt.

Im Programm folgende Zeilen (nach dem Laden der Projektdatei!):

cBuffer := “X” // Vorbelegung Buffer
nRet := LlGetVariableType(LL_Job,"@MYUSERVAR")
IF nRet = LL_TEXT
nRet := LlGetUserVariableContents(LL_JOB,"@MYUSERVAR",@cBuffer,1)
ENDIF

Da im Projekt die Benutzervariable mit 1 Byte belegt ist, habe ich
versuchsweise ebenfalls als Länge 1 Byte beim 4. Parameter angegeben.
Ergebnis: cBuffer wird überschrieben und ist anschließend leer (String-Länge
0)

Wenn ich aber z.B. cBuffer mit 20 Leerzeichen vorbelege und im 4. Parameter
20 angebe, erhalte ich nach LLGetUserVariableContents den Wert “V” in
cBuffer. Es wird also korrekt nur 1 Byte nach cBuffer transferiert, denn
mehr ist ja nicht da. Aber warum funktioniert es nicht, wenn der Buffer auch
nur 1 Byte groß ist (was ja ausreichen würde) und dieses 1 Byte korrekt in
der Funktion als Parameter angegeben ist? Und warum geht es nicht mit
numerischen Werten?

Vielleicht weiß jemand Rat? Danke.

Klemens


(Guest) #2

Weil ein Leerstring 1 Byte groß ist.

Du bekommst übrigens IMMER einen Text zurück, selbst bei numerischen
Werten. Also besser nicht den ersten Versuch (@nBuffer). Kein Wunder,
daß das einen GPF gab.

Also in etwa:

cBuffer := Str$(256,’ ') // oder so…
nRet := LlGetUserVariableContents(LL_JOB,"@MYUSERVAR",@cBuffer,256)

und dann hast Du den Inhalt (wenn 255 Zeichen für den Inhalt immer
reichen) - egal welcher Feldtyp.

Paulchen

“Klemens Lichter” <csl@licht…> wrote in message
news:2294211202009133947@combit.net

Hallo,

habe folgendes Problem: Ich möchte aus einem Projekt, das
Benutzer-Variablen
besitzt, deren Wert auslesen und im Programm auswerten. Das Programm
soll,
je nach Wert der Benutzervariable in der Projektdatei andere Daten
an L&L
senden.

Ich hatte es zunächst mit numerischen Variablen versucht, aber ohne
Erfolg:

Im Projekt eine Benutzervariable angelegt und mit dem Wert -1-
belegt.

Im Programm folgende Zeilen (nach dem Laden der Projektdatei!):

nBuffer := 0
nRet := LlGetVariableType(LL_Job,"@MYUSERVAR")
IF nRet = LL_NUMERIC
nRet := LlGetUserVariableContents(LL_JOB,"@MYUSERVAR",@nBuffer,1)
ENDIF

nRet ist immer -44, also Fehler Buffer zu klein. Vergrößerung des
für
Buffergröße vorgesehenen 4. Parameters in llGetUserVariableContents
auf 2
und schrittweise bis 19 brachte keine Änderung. Bei 20 kam es zum
Programmabsturz.

Habe es dann mit einer Textvariable versucht:

Im Projekt eine Benutzervariable angelegt und mit dem Wert “V”
belegt.

Im Programm folgende Zeilen (nach dem Laden der Projektdatei!):

cBuffer := “X” // Vorbelegung Buffer
nRet := LlGetVariableType(LL_Job,"@MYUSERVAR")
IF nRet = LL_TEXT
nRet := LlGetUserVariableContents(LL_JOB,"@MYUSERVAR",@cBuffer,1)
ENDIF

Da im Projekt die Benutzervariable mit 1 Byte belegt ist, habe ich
versuchsweise ebenfalls als Länge 1 Byte beim 4. Parameter
angegeben.
Ergebnis: cBuffer wird überschrieben und ist anschließend leer
(String-Länge
0)

Wenn ich aber z.B. cBuffer mit 20 Leerzeichen vorbelege und im 4.
Parameter
20 angebe, erhalte ich nach LLGetUserVariableContents den Wert “V”
in
cBuffer. Es wird also korrekt nur 1 Byte nach cBuffer transferiert,
denn
mehr ist ja nicht da. Aber warum funktioniert es nicht, wenn der
Buffer auch
nur 1 Byte groß ist (was ja ausreichen würde) und dieses 1 Byte
korrekt in
der Funktion als Parameter angegeben ist? Und warum geht es nicht
mit
numerischen Werten?

Vielleicht weiß jemand Rat? Danke.

Klemens