Zitat:
Original erstellt von Nano:
Hallo zusammenHabe das Problem wenn AutoCAD gestartet wird. ist mein Supportpfad
noch nicht aufgelistet.
Das heisst mein (DEFUN S::STARTUP() wird nicht geladen.
Wie kann ich das lösen.
Gruss Nano
Wie das richtig geladen, wird, haben ja andere schon erklärt. Bleibt mir nur noch zub erläutern, wie das richtig programmiert wird.
Erstens: es gibt nur eine einzige S::STARTUP Funktion. Und die gehört nicht unbedingt einem alleine. Diese Funktion wird deshalb NIEMALS über DEFUN definiert.
Man definiert sich vielmehr eine eigene Funktion mit einem eigenen Namen, die genau das ausführen soll, was man beim Start von AutoCAD bzw Öffnen einer DWG ausgeführt haben will. Wichtig: diese Funktion muss man spätestens seit A2K UNBEDINGT via DEFUN-Q definieren. Im Unterschied zu DEFUN erzeugt DEFUN-Q nämlich Funktionen "alten" Stils, die Funktion ist dann im LISP-Interpreter als Liste gespeichert. Also beispielsweise:
(defun-q meinestartfunktion ()
(machtirgendwas)
)
In der ACAD.LSP, der *.MNL oder wo auch immer man die S::STARTUP-Funktion dann definieren will, da wird erst mal nachgesehen, ob es schon eine S::STARTUP Funktion gibt, die eventuell von einer anderen Appikation schon erstellt worden ist. Ist keine vorhanden, dann schreibt man einfach:
(if s::startup
(setq s::startup meinestartfunktion )
;; das steht unten
)
und das war's auch schon. Ist aber schon eine S::STARTUP Funktion vorhanden, dann prüft man erst, ob das eine Liste ist, oder ob irgend ein ignoranter Programmierer diese Funktion eventuell fälschlicherweise mittels DEFUN statt DEFUN-Q programmiert hat. Hat er DEFUN verwendet, dann schmeisst man seine Funktion einfach raus ... :-). Dann sieht das also insgesamt so aus
Code:
(defun-q meinestartfunktion ()
(machtirgendwas)
)(if (and s::startup
(listp s::startup)
)
(setq s::startup (reverse (append '(meinestartfunktion)(reverse s::startup))))
(setq s::startup meinestartfunktion)
)
Gruß
Tom
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP