Hallo Programmierer
Ich habe ein schwerwiegendes Problem, bei dem ich einfach nicht weiter komme. Ich habe hier mal den Ausschnitt des Lisp-Programms angefügt um das es geht. Das Programm soll beim starten einer neuen Zeichnung überprüfen ob alle Menü-Dateien geladen sind. Wenn nicht wird eine Fehlermeldung angezeigt. Wenn alle Menüs da sind wird das Unterprogramm (startup) aufgerufen welches weitere Einstellungen vornimmt. Das klappt auch alles wenn man ACAD das erste Mal startet.
Und der Anwender muß die Menüs neu laden (Kann natürlich auch programmiert werden, das ACAD das selber macht. Hab ich aber wegen der Fehler nicht gemacht wegen der besseren Übersich). Der Benutzer gibt nun Install ein und alle Menüs sind geladen. Bis hierhin alles wunderbar. Wenn man allerdings wieder ein Menü entläd und eine neue Zeichnung öffnet, oder noch eine, müßte eigentlich die Warnmeldung wieder kommen aber es kommt nur die Fehlermeldung:
; Fehler: Ausnahmebedingung aufgetreten: 0xC0000005 (Zugriffsverletzung)
; Warnung: Unwind übersprungen bei Ausnahmebedingung
; Fehler: Ausnahmebedingung aufgetreten: 0xC0000005 (Zugriffsverletzung)
; Fehler: Ausnahmebedingung aufgetreten: 0xC0000005 (Zugriffsverletzung)
Hier meine Befehle:
Befehle befinden sich in der acad.lsp und werden bei jeder zeichnung neu geladen
(defun S::startup (/ lina lim fehler)
(vl-load-com)
(command "cmdecho" "0")
(command "regenmode" "0")
(command "visretain" "1")
(setq menüsgel (mapcar (function (lambda (X) (car X))) (menu-list)) )
(setq menüsmus "GEWERKE")
(startup-prüf)
(setq menüsmus "HELUESAR")
(startup-prüf)
(setq menüsmus "ACAD")
(startup-prüf)
(setq menüsmus "SYMBOLE")
(startup-prüf)
(setq menüsmus "LAYERART")
(startup-prüf)
(setq menüsmus "LAYERAZ")
(startup-prüf)
;(if (not startup)
;(load "startup.lsp" "Datei Startup.lsp nicht gefunden"))
(if ( = fehler 1) (alert "Die Menüdateien sind nicht geladen
Laden Sie die Menüs mit dem Befehl install neu
oder überprüfen Sie Ihre Netzwerkverknüpfung")
;(startup); weiterer Verlauf uninteressant da Programm nicht soweit kommt. Habe ich aukommentiert da ich den Befehl nicht beigefügt habe.
)
(princ)
)
(defun startup-prüf ( / )
(setq nr -1 schl 1 inst 0)
(while schl
(setq nr (+ 1 nr ))
(setq a-1 (nth nr menüsgel))
(if (= a-1 nil)(setq schl nil)())
(if (= a-1 menüsmus)(setq inst 1))
)
(if (= inst 0)(setq fehler 1)())
(princ)
)
(defun MENU-LIST (/ RETVAL) ;Menüliste erstellen
(vlax-for FOR-ITEM (vla-get-menugroups (vlax-get-acad-object))
(setq RETVAL (cons (cons (strcase (vla-get-name FOR-ITEM)) FOR-ITEM)
RETVAL
) ;_ end of cons
) ;_ end of setq
) ;_ end of vlax-for
) ;_ end of defun
(defun c:install (/ )
(command "menüentf" "ACAD")
(command "menüentf" "HELUESAR")
(command "menüentf" "GEWERKE")
(command "menüentf" "SYMBOLE")
(command "menüentf" "LAYERART")
(command "menüentf" "LAYERAZ")
(command "menülad" "ACAD.MNS")
(command "menülad" "HELUESAR.MNS")
(command "menülad" "GEWERKE.MNS")
(command "menülad" "SYMBOLE.MNS")
(command "menülad" "LAYERART.MNS")
(command "menülad" "LAYERAZ.MNS")
(menucmd "P1=-")
(menucmd "P1=-")
(menucmd "P1=-")
(menucmd "P1=-")
(menucmd "P1=-")
(menucmd "P1=-")
(menucmd "P1=-")
(menucmd "P1=-")
(menucmd "P1=-")
(menucmd "P1=-")
(menucmd "P1=-")
(menucmd "P1=-")
(menucmd "P0=ACAD.SNAP")
(menucmd "P1=+ACAD.FILE")
(menucmd "P2=+ACAD.EDIT")
(menucmd "P3=+ACAD.VIEW")
(menucmd "P4=+ACAD.INSERT")
(menucmd "P5=+ACAD.FORMAT")
(menucmd "P6=+ACAD.TOOLS")
(menucmd "P7=+ACAD.DRAW")
(menucmd "P8=+ACAD.DIMENSION")
(menucmd "P9=+ACAD.MODIFY")
(menucmd "P10=+HELUESAR.GEWERKE")
(menucmd "P11=+HELUESAR.STEMPEL")
(menucmd "P12=+HELUESAR.LAYER")
(menucmd "P13=+LAYERAZ.GEWERKE-LAYER")
(menucmd "P14=+HELUESAR.TEXT")
(menucmd "P15=+GEWERKE.ALLE")
(menucmd "P16=+SYMBOLE.ALLE")
(menucmd "P17=+ACAD.WINDOW")
(menucmd "P18=+ACAD.HELP")
)
Zum Nachvollziehen könnt Ihr die Sache natürlich abkürzen indem Ihr Menüs aus den Lisp-Programmen entfernt
Bin für jeden Vorschlag dankbar. Vieleicht geht ja auch nicht was ich vorhabe. Ich hoffe nur bei Euch kommen die gleichen Fehlermeldungen. Ich weiß wohl das ich noch eine Überprüfung machen muß ob ACAD die Menüs überhaupt finden kann. Aber daran liegts nicht. Das mach ich auch noch. Man kann auch bestimmt einiges besser schreiben als wie ich es gemacht hab, allerdings verliere ich bei sehr komprimierter Schreibweise leicht die Orientierung;-). Hoffe ich habe mich verständlich ausgedrückt.
Danke schon mal an alle.
[Diese Nachricht wurde von mkl-cad am 02. Mrz. 2004 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP