Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Fehlermeldung bei Globalen Varaiblen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Fehlermeldung bei Globalen Varaiblen (1567 mal gelesen)
cadking
Mitglied
CAD-Zeichendiensleistung


Sehen Sie sich das Profil von cadking an!   Senden Sie eine Private Message an cadking  Schreiben Sie einen Gästebucheintrag für cadking

Beiträge: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 09. Jan. 2017 12:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo ihr lieben Helfer,
ich habe schon in AutoCAD 2012 einige Lisp's erstellt unf versuche mich jetzt an AutoCAD 2015.
Dabei habe ich ein Problem mit Lisp's, in denen Variablen Global definiert sind:

(defun getoldvar (blkscale blkscaleo attreqmode cmdoldecho oldsnap / )
(setq blkscale (getvar "INSUNITS"))
(setq blkscaleo (getvar "INSUNITSDEFTARGET"))
(setq attreqmode (getvar "attreq"))
(setq cmdoldecho (getvar "cmdecho"))
(setq oldsnap (getvar "osmode"))
)
Diese Variante gibt mir folgende Meldung zurück:
Befehl: (LOAD "T:/Roche/Ihmann/Elektroblocktausch/LSP/getoldvar1.lsp")
Aufrufen von (command) aus *Fehler* nicht möglich, ohne vorheriges Aufrufen von (*push-error-using-command*).
Konvertieren von (command)-Aufrufen in (command-s) wird empfohlen.

(defun getoldvar ( / blkscale blkscaleo attreqmode cmdoldecho oldsnap)
(setq blkscale (getvar "INSUNITS"))
(setq blkscaleo (getvar "INSUNITSDEFTARGET"))
(setq attreqmode (getvar "attreq"))
(setq cmdoldecho (getvar "cmdecho"))
(setq oldsnap (getvar "osmode"))
)
(getoldvar)
Diese Variante funktioniert.
Wie kann ich Lisp's mit globalen Variablen für AutCAD 2015 definieren?

Danke für eure Hilfe
Stefan

------------------
Danke Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 09. Jan. 2017 12:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadking 10 Unities + Antwort hilfreich

und
(defun getoldvar ()
(setq blkscale (getvar "INSUNITS"))
(setq blkscaleo (getvar "INSUNITSDEFTARGET"))
(setq attreqmode (getvar "attreq"))
(setq cmdoldecho (getvar "cmdecho"))
(setq oldsnap (getvar "osmode"))
)

???

wenn du keine Eingaben in der Funktion benötigst, brauchst du auch keine übergeben

------------------
Also ich finde Unities gut ... und andere sicher auch
---------------------------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadking
Mitglied
CAD-Zeichendiensleistung


Sehen Sie sich das Profil von cadking an!   Senden Sie eine Private Message an cadking  Schreiben Sie einen Gästebucheintrag für cadking

Beiträge: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 09. Jan. 2017 13:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo CADmium,
deine Variante funktioniert zwar auch, aber die Variablen behalten ihre Werte nach Beendigung der Lisp.
Die Variablen sollen aber wieder auf NIL zurückgesetzt werden und ich möchte die nicht mit
am Ende allle wieder Setq wieder zurücksetzen.

Ausserdem ist diese defun-Funktion nur ein Bestandteil einer Lisp und immer wenn ich die Variablen Global, also
( Variable1 Variable2 Variable3 / )
eingebe erhalte ich die Meldung:
Aufrufen von (command) aus *Fehler* nicht möglich, ohne vorheriges Aufrufen von (*push-error-using-command*).
Konvertieren von (command)-Aufrufen in (command-s) wird empfohlen.

Diese Meldung kenne ich nicht aus AutoCAD 2012. Werden in AutoCAD 2015 die globalen Variablen anders definiert?

------------------
Danke Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 09. Jan. 2017 13:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadking 10 Unities + Antwort hilfreich

dann mußt du die Variablen in der übergeordneten Lispfunktion als lokal deklarieren

(defun C:BLABLA(/ blkscale blkscaleo attreqmode cmdoldecho oldsnap getoldvar)
  (defun getoldvar ()
    (setq blkscale (getvar "INSUNITS"))
    (setq blkscaleo (getvar "INSUNITSDEFTARGET"))
    (setq attreqmode (getvar "attreq"))
    (setq cmdoldecho (getvar "cmdecho"))
    (setq oldsnap (getvar "osmode"))
  )
  .... machirgendwas ....
)
)

------------------
Also ich finde Unities gut ... und andere sicher auch
---------------------------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadking
Mitglied
CAD-Zeichendiensleistung


Sehen Sie sich das Profil von cadking an!   Senden Sie eine Private Message an cadking  Schreiben Sie einen Gästebucheintrag für cadking

Beiträge: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 09. Jan. 2017 17:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo CADmium,
danke für deine Antwort. So funktioniert es zwar, aber es ist doch wesentlich umständlicher als in AutoCAD 2012.
Ist das mit den globalen Variablen wirklich anders als früher?
So muss man ja immer eine zusätzliche Funktion erstellen um die Variablen zu löschen.

------------------
Danke Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 09. Jan. 2017 18:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadking 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadking:
Ist das mit den globalen Variablen wirklich anders als früher?

NEIN, es ist nichts anders wie früher (was dies angeht).
Auch denke ich, ohne selbst am Programm zu prüfen,  dass deine Fehlermeldung nichts mit dem hier geposteten Code zutun hat.
Deine Fehlermeldung zeigt den Fehlerfall(Abbruch) und die Meldung deutet darauf hin das in deiner *error*-Routine ein COMMAND  verwendet wird.

Dein ursprünglicher {(defun getoldvar (blkscale...} Code ist Nonsens, egal in welcher Version.

Es ist daher derzeit nicht klar was du bisher eingesetzt hattest.

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

neurosis
Mitglied
dipl.ing.


Sehen Sie sich das Profil von neurosis an!   Senden Sie eine Private Message an neurosis  Schreiben Sie einen Gästebucheintrag für neurosis

Beiträge: 222
Registriert: 22.08.2006

erstellt am: 09. Jan. 2017 20:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadking 10 Unities + Antwort hilfreich

hallo cadking,
als ergaenzung zu dem schon geschrieben wuerde ich dir folgende seiten zum thema funktionen / funktionsdeklarationen / sichtbarkeiten von variablen empfehlen:

definieren von eigenen funktionen

und besonders
lokale variablen und funktionsargumente

vielleicht klaert sich dadurch schon einiges.

ansonsten gehe ich mit cadffm konform, dass der fehler in einer error-routine liegt. wodurch der fehler auftritt, keine ahnung, aber definitiv nicht durch verwendung der geposteten funktion (ausser du rufst sie falsch auf).

gruss
marco

------------------
Marco Heuer
www.arc-aachen.de
Airport Office

[Diese Nachricht wurde von neurosis am 09. Jan. 2017 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadking
Mitglied
CAD-Zeichendiensleistung


Sehen Sie sich das Profil von cadking an!   Senden Sie eine Private Message an cadking  Schreiben Sie einen Gästebucheintrag für cadking

Beiträge: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 10. Jan. 2017 10:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo cadffm, hallo Marco,
vielen Dank, dass ihr euch mit meinem Problem beschäftigt.
Warum ist der Code Nonsens? Ich speichere damit Variablen, die ich später wieder zurücksetzen möchte.

zu Marco:
ich habe die Funktion aus einer anderen Lisp herauskopiert um zu prüfen ob die Fehlermeldung aus den globalen Variablen herrührt. In dieser Funktion gib es doch gar keine error-routine. Und ich starte die Funktion:
(defun getoldvar (blkscale blkscaleo attreqmode cmdoldecho oldsnap / )
(setq blkscale (getvar "INSUNITS"))
(setq blkscaleo (getvar "INSUNITSDEFTARGET"))
(setq attreqmode (getvar "attreq"))
(setq cmdoldecho (getvar "cmdecho"))
(setq oldsnap (getvar "osmode"))
)
(getoldvar)

durch Drag&Drop aus dem Explorer. Wie kann ich die Funktion da falsch starten?

Ich erhalte die Fehlermeldung immer, wenn ich eine Funktion wie folgt schreibe:
(defun irgendwas (Var1 Var2 / )
...
)
(irgendwas)

Diese Funktion läuft ohne Fehlermeldung ab:
(defun irgendwas ( / Var1 Var2)
...
)
(irgendwas)

Gruß Stefan

------------------
Danke Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 10. Jan. 2017 10:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadking 10 Unities + Antwort hilfreich

(defun getoldvar (blkscale blkscaleo attreqmode cmdoldecho oldsnap / )
...
(getoldvar)

da fehlen im Funktionsaufruf 5 Parameter !!!!!
da du die Variablen eh nicht nutzt reicht (getoldvar  0 0 0 0 0)  oder mit Nil

Aber ich verstehe dich trotzdem nicht ... wenn du die Funktion so definierst
(defun getoldvar (blkscale blkscaleo attreqmode cmdoldecho oldsnap / )

hast du außerhalb der Funktion keinen Zugriff auf die Vars ... alle Nil ... kannst nichts zurücksetzen, brauchst aber auch nicht zu "löschen"

definierst du die Funktion so
(defun getoldvar ()
  (setq blkscale (getvar "INSUNITS"))
   ...
)
hast du globale Variablen, kannst zurücksetzen , und musst so gewollt ??? "löschen"

Universeller wäre sowieso ne Funktion mit einer Sysvarliste als Parameter und Rückgabewert ... irgendwo in den Tiefen des Lispbretts gabs mal einen Errorhandler , der so ähnlich gearbeitet hat
 
Mal als Idee:

(vl-load-com)
(defun GETSYSVARS( SYSVARS )
  (if(and(=(type SYSVARS)'LIST)
(setq SYSVARS(vl-remove-if-not '(lambda(X)(=(type X)'STR)) SYSVARS))
     )
    (mapcar '(lambda(X)(list (strcase X)(getvar X))) SYSVARS)
  )
)
(defun SETSYSVARS( SYSVARS )
  (if(and(=(type SYSVARS) 'LIST)
(setq SYSVARS(vl-remove-if-not '(lambda(X)(=(type (car X))'STR)) SYSVARS))
     )
   
    (mapcar
      '(lambda(X)
(if(not(vl-catch-all-error-p
  (vl-catch-all-apply 'setvar (list (car X)(cadr X)))
)
       )
   (car X)
)
       )
      SYSVARS
    )
  )


(defun C:TESTUS(/ *MYSYVARLIST*)
   (setq *MYSYVARLIST* (GETSYSVARS '("INSUNITS" "INSUNITSDEFTARGET" "attreq" "cmdecho" "osmode")))

   machwas
   (SETSYSVARS *MYSYVARLIST*)
   (princ)
)


------------------
Also ich finde Unities gut ... und andere sicher auch
---------------------------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Meldin
Mitglied



Sehen Sie sich das Profil von Meldin an!   Senden Sie eine Private Message an Meldin  Schreiben Sie einen Gästebucheintrag für Meldin

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 10. Jan. 2017 10:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadking 10 Unities + Antwort hilfreich

Hallo,
dein Code läuft immer wenn du was übergibst also teste verschidenes:
(getoldvar "hier" "kann" "egal" "was" "stehen")
(getoldvar "Ein" "Vogel" "auf" "dem" "Baum") 
(getoldvar 1 2 3 4 5 )
 
Schau dir im defun die Klammer an "(Übergabe / lokaleVar)"

------------------
Gruß Wolfgang

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


Sehen Sie sich das Profil von joern bosse an!   Senden Sie eine Private Message an joern bosse  Schreiben Sie einen Gästebucheintrag für joern bosse

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 10. Jan. 2017 12:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadking 10 Unities + Antwort hilfreich

Hallo Stefan,
hier noch eine Variante, mit der die alten Variableninhalte in einer globalen Variable "TEST$$VariList" gespeichert werden und zu Beginn, optional, auf Default-Werte gesetzt werden:
Code:

;;;Varialble mit optionalen DefaultWert für die Laufzeit
(defun Test:Vari:List ( / VariList)
  '(
    ("plinetype" nil)
    ("osmode" 0)
    ("cmdecho" 0)
    ("osnapcoord" 1)
    ("clayer" nil)
    ("dimzin" 3)
    ("michgibtesgarnicht" nil)
    ))

;;;Variablenwerte speichern und optional auf Defaultwert setzen
(defun TEST:Vari:Store ( / )
  (setq TEST$$VariList
(vl-remove-if 'not
  (mapcar '(lambda(X)
      (if (getvar (car X))
(progn
  (if (cadr X)
    (setvar (car X)(cadr X)))
  (list (car X)(getvar (car X)))))
      )
  (Test:Vari:List))))
  )

;;;ursprüngliche Variablenwerte wiederherstellen
(defun TEST:Vari:ReStore ( / )
  (mapcar '(lambda(X)
    (setvar (car X)(cadr X)))
  TEST$$VariList)
  (setq TEST$$VariList nil))

(defun c:test ( / )
  (TEST:Vari:Store)
  (alert "Das ist ein Testprogramm")
  (TEST:Vari:ReStore)
  (princ))


------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Liniensignaturen Youtube

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadking
Mitglied
CAD-Zeichendiensleistung


Sehen Sie sich das Profil von cadking an!   Senden Sie eine Private Message an cadking  Schreiben Sie einen Gästebucheintrag für cadking

Beiträge: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 10. Jan. 2017 14:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo CADmium,
danke für die Mühe, aber dein Code gibt mir dieselbe Fehlermeldung zurück:
Ich habe die Zeile machwas durch
(princ *MYSYVARLIST*) ersetzt.

Befehl: testus

Aufrufen von (command) aus *Fehler* nicht möglich, ohne vorheriges Aufrufen von (*push-error-using-command*).
Konvertieren von (command)-Aufrufen in (command-s) wird empfohlen.
Befehl:
Ich kappiers nicht, sorry

------------------
Danke Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 10. Jan. 2017 14:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadking 10 Unities + Antwort hilfreich

nur Kurz: Der Code von CADmium hat Fehler<sicher keine Absicht>, soweit so gut.
Durch den Fehler gibt es (wieder) einen Abbruch, die aktuelle *error*-Funktion springt an
und da diese unverändert ist, kommt wieder der besagte Fehler.

DIESER Fehler hat aber nicht mit dem Code zutun, der möglicherweise auch schon bei der Eingabe von (/ 1 0) nachzuvollziehen ist,
was aber nicht ganz sicher zu sagen ist, da man die Error-Funktion nicht kennt.

Soll-Verhalten:
Befehl: (/ 1 0)
; Fehler: Division durch 0

Gegen-Probe:
Befehl: (setq olderr *error*)
#<SUBR @0000006e43e2e8e0 *ERROR*>

Befehl: (defun *error* (msg)(command "FILEDIA" 1)(alert "Diese Meldung wird nicht erscheinen"))
*ERROR*

Befehl: (/ 1 0)

Aufrufen von (command) aus *Fehler* nicht möglich, ohne vorheriges Aufrufen von (*push-error-using-command*).
Konvertieren von (command)-Aufrufen in (command-s) wird empfohlen.

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 10. Jan. 2017 14:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadking 10 Unities + Antwort hilfreich

Hallo Stefan,
ich hab das hier gelesen und möchte dir noch etwas zum Nachdenken geben.

Wenn du kleine Hilfsprogramme wie z.B. das hier zum Verwalten von Systemvariablen erstelltst, dann mach sie so universell wie möglich.
Wenn du ein Programm schreibst das dir einige Variablen speichert/wiederherstellt dann kann dieses Programm keine weitere Variable verarbeiten (außer du änderst das Programm).
Wenn du ein Programm schreibst dem du eine Liste mit Variablennamen gibst die verarbeitet werden sollen, ist das universeller wenn du mal andere Variablen brauchst.

Die Variable in der die Werte (mit den zugehörigen Namen) gespeichert werden ist natürlich "so global wie möglich" damit andere Programmmodule darauf zugreifen können. Das kann so weit gehen dass du z.B. den aktuellen Layer speicherst, stundenlang bis kurz vor Feierabend auf anderen Layern arbeitest und dann den gespeicherten Layer wieder aktuell machen lässt.
Also keine Angst vor globalen Variablen, wenn sie Sinn machen.

Aber wie hier ja schon darauf hingewiesen wurde, solltest du dir die Verarbeitung in Listen anschauen. Du kannst viele Vorhaben damit vereinfachen.

Stell dir nur mal vor du hast 30-50 Systemvariablen gespeichert, während dem Programmablauf müssen einige wieder ihren gespeicherten Wert bekommen (das Programm holt sich die Werte aus der Liste) und zum Schluss alle.
Das Programm könnte einfach alle in der Liste abarbeiten, ohne dass du dir merken musst welche Sysvars du gespeichert hast (stehn ja in der Liste)
Und wenn du die gespeicherten Sysvars nicht mehr braucht, löschst du nur die Liste, also eine einzige Variable.

Denk mal drüber nach.
Ich hab vor 17 Jahren (kann ich mir gut merken weils 2000 war  ) fast alle meine Programme neu geschrieben, weil ich sagen wir mal "üngünstig" programmiert habe.
War ne Menge Arbeit.
Spar dir das.

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 10. Jan. 2017 15:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadking 10 Unities + Antwort hilfreich

so .. hat ne Klammer und ein ' gefehlt ... hatte ich so in den Editor gekloppt, da passiert so was schon mal .. sorry  ... sollte jetzt gehen

------------------
Also ich finde Unities gut ... und andere sicher auch
---------------------------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadking
Mitglied
CAD-Zeichendiensleistung


Sehen Sie sich das Profil von cadking an!   Senden Sie eine Private Message an cadking  Schreiben Sie einen Gästebucheintrag für cadking

Beiträge: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 10. Jan. 2017 16:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo cadffm,
danke für deinen Beitrag.
Befehl: (/ 1 0) gibt bei mir

Aufrufen von (command) aus *Fehler* nicht möglich, ohne vorheriges Aufrufen von (*push-error-using-command*).
Konvertieren von (command)-Aufrufen in (command-s) wird empfohlen.

zurück. Also scheint etwas mit der *error*-Funktion nicht zu stimmen. Bisher (in AutoCAD 2012) kannte ich in diesem Fall nur die Meldung:
; Fehler: Division durch 0

Wo ist denn diese *error*-Funktion in MEP2015 programmiert?

Ich danke euch allen für eure Mühe und Hinweise.

------------------
Danke Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 10. Jan. 2017 16:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadking 10 Unities + Antwort hilfreich

Die Originale ist für dich nicht greifbar, aber man kann diese wie zuvor überschreiben und das nehme ich an, ist bei dir der Fall.

Du lässt wohl (automatisch?) irgendwelche Dateien laden in der die *error* Funktion definiert ist, damit überschreibst du die Originale.

Wir können aber nicht prüfen welche Scripte.scr und Lisps.lsp/fas/vlax bei dir mitgeladen waren.

Jeder der versucht zu helfen kann Fehler machen oder einfach falsch liegen, aber ich würde meinen zu 99% richtig zu liegen.

Bisher wurde meine Meinung zumindest von niemandem ergänzt oder korrigiert?

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Rembetiko
Mitglied
CAD-Konstrukteur


Sehen Sie sich das Profil von Rembetiko an!   Senden Sie eine Private Message an Rembetiko  Schreiben Sie einen Gästebucheintrag für Rembetiko

Beiträge: 101
Registriert: 06.10.2015

erstellt am: 10. Jan. 2017 16:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadking 10 Unities + Antwort hilfreich

Ich kann Dir nur empfehlen, diese Meldung

Aufrufen von (command) aus *Fehler* nicht möglich, ohne vorheriges Aufrufen von (*push-error-using-command*).
Konvertieren von (command)-Aufrufen in (command-s) wird empfohlen.

geflissentlich zu ignorieren, da Du keinen Einfluss auf sie haben wirst, da sie irgendwo aus den Untiefen Deiner Zusatzapplikation stammen wird. Autodesk scheint irgendwo zwischen AutoCAD 2012 und AutoCAD 2015 etwas hinsichtlich command-s und command geändert zu haben. Seitdem schlagen sich diverse Anwender von Zusatzapplikationen mit dieser Fehlermeldung herum, welche offenbar von den wenigsten Applikationsherstellern einschl. Autodesk (--->MEP) nicht in älteren Programmcodes revidiert wird. Konkrete Auswirkungen habe ich selbst deshalb noch nicht festgestellt.

------------------
*So spielt das Leben sagte der Clown und malte sich ein Lächeln ins Gesicht*

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 10. Jan. 2017 18:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadking 10 Unities + Antwort hilfreich

Ja, der "Umbau" war bei Version 2015. Hat mich (und andere) auch ganz schön Arbeit gekostet. 
Aber das sollte auf keinen Fall ignoriert werden, weil ab dem Moment der Fehlermeldung das laufende Lisp ja abgebrochen wird und somit nicht mehr funktioniert.
Wenn das so OK ist ... von mir aus, aber eigentlich soll es doch funktionieren, oder   

Also wenn ich Tage oder sogar Wochen an einer Funktion schreibe oder diese evtl. für sauer verdientes Geld gekauft habe, ignoriere ich das ganz sicher nicht. Muss aber jeder sebst entscheiden.

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz