AutoLISP-Kompatibilität

Für AutoLISP-Programme sind in der Regel sehr wenige Änderungen erforderlich, damit sie in der aktuellen Version ausgeführt werden können.

Ein AutoLISP-Programm wird jedoch möglicherweise in der neuesten Version nicht mehr richtig ausgeführt, da eine AutoLISP-Funktion oder ein Befehl des AutoCAD-basierten Produkts oder eine Systemvariable geändert wurde oder nicht mehr unterstützt wird.

Anmerkung: In den AutoCAD-basierten Produkten ab Version 2014 müssen benutzerdefinierte Anwendungen im sicheren Modus ausgeführt werden. Die Systemvariable SECURELOAD ist auf den Wert 1 oder 2 festgelegt. Wenn der sichere Modus ausgeführt wird, kann das AutoCAD-basierte Produkt Dateien mit Code nur aus vertrauenswürdigen Speicherorten laden und ausführen. Vertrauenswürdige Speicherorte werden durch die Systemvariable TRUSTEDPATHS angegeben. Weitere Informationen finden Sie unter "Sicherheit und Virenschutz".

Allgemeine Informationen

Veraltete Befehle und Systemvariablen

Überprüfen Sie Ihre benutzerdefinierten Programme auf Befehle und Systemvariablen, die als veraltet gekennzeichnet wurden. In einigen Fällen funktionieren veraltete Befehle oder Systemvariablen möglicherweise weiterhin mit ihren benutzerdefinierten Programmen, obwohl sie nicht direkt in der Befehlszeile eingegeben oder über die Benutzeroberfläche aufgerufen werden können.

Anmerkung: Selbst wenn veraltete Befehle und Systemvariablen in einigen benutzerdefinierten Programmen funktionieren, bedeutet das nicht, dass sie auch in einer zukünftigen Produktversion funktionieren werden. Sie sollten Ihre benutzerdefinierten Programme neu schreiben, um die Verwendung veralteter Befehle und Systemvariablen zu vermeiden.

Die folgenden Techniken können nützlich sein, wenn Sie veraltete Befehle oder Systemvariablen in einem benutzerdefinierten Programm verwenden möchten:

  • Stellen Sie dem Befehlsnamen einen Punkt voran. Beispiel: .BLIPMODE ermöglicht die Verwendung des Befehls BLIPMODE.
  • Vermeiden Sie das Ausführen einer veralteten Systemvariablen mit der Funktion BEFEHL, die zu einer Fehlermeldung Unbekannter Befehl führen kann. Verwenden Sie stattdessen die Befehle GETVAR und SETVAR. Beispiel: ( getvar "BLIPMODE" ) Gibt den aktuellen Wert der Systemvariablen BLIPMODE zurück.
Anmerkung: Aus dem Produkt entfernte Befehle und Systemvariablen können nicht mit den zuvor beschriebenen Techniken wiederhergestellt werden.

AutoCAD 2021-basierte Produkte und spätere Versionen

Unicode-Unterstützung

Die AutoLISP-Umgebung wurde aktualisiert und unterstützt jetzt Unicode-Zeichen, was sich auf Funktionen auswirkt, die zum Bearbeiten oder Zurückgeben von Zeichenfolgenwerten verwendet werden. Weitere Informationen zu den Funktionen, die für die Unicode-Unterstützung aktualisiert wurden, finden Sie unter Neue Funktionen oder Änderungen in AutoLISP.

Basierend auf den in Ihren Programmen verwendeten Funktionen müssen Sie möglicherweise Änderungen vornehmen, damit Unicode-Zeichen verwendet werden können. Der Rückgabewert der ASCII-Funktion kann nun beispielsweise größer als 255 sein oder im Vergleich zu früheren Versionen einen anderen Wert aufweisen, wenn ein Unicode-Zeichen an die Funktion übergeben wird. Sie können die Systemvariable LISPSYS verwenden, um die in das Programm geladene vorgabemäßige AutoLISP-Umgebung zu identifizieren und zu steuern; 0 und 2 = MBCS-Unterstützung (alte Umgebung) und 1 = Unicode-Unterstützung.

Das folgende Code-Snippet zeigt, wie Sie bestimmen, welche AutoLISP-Umgebung derzeit in das Programm geladen ist, und wie die Code-Ausführung auf Grundlage der geladenen Umgebung gesteuert wird:

(if (= (getvar "LISPSYS") 1)
  (alert (strcat 
             "Unicode support enabled"
             "\n(ASCII \"€\") returns 8364"
         )
  )
  (alert (strcat 
             "MBCS (Legacy) support enabled"
             "\n(ASCII \"€\") returns 128"
         )
  )
)
Anmerkung: Beim Kompilieren von AutoLISP-Quelldateien (LSP-Dateien) mit Visual LISP Integrated Development Environment (VL IDE) oder dem Befehl LISPAPPERST steuert der aktuelle Wert der Systemvariablen LISPSYS das Format, in dem Dateien kompiliert werden. Dateien, die mit der Einstellung 1 für die Systemvariable LISPSYS im Unicode-Format kompiliert wurden, können nicht in AutoCAD 2020 oder frühere Versionen geladen werden. Stellen Sie vor dem Kompilieren von Dateien für LISPSYS den Wert 0 oder 2 ein, um sicherzustellen, dass diese auch in frühere Versionen geladen werden können. Dadurch wird jedoch die Unicode-Unterstützung eingeschränkt.

AutoCAD 2020-basierte Produkte und spätere Versionen

EINFÜGE (Befehl)

Der Befehl EINFÜGE zeigt jetzt die Blockpalette an, während der neue Befehl KLASSISCHEINFÜG jetzt das "alte" Dialogfeld Einfügen anzeigt. Wenn die Verwendung des Dialogfelds Einfügen für Ihr AutoLISP-Programm wichtig ist, müssen Sie das vorhandene Programm ändern. Bisher haben Sie möglicherweise die folgenden AutoLISP-Anweisungen verwendet, um das Dialogfeld Einfügen anzuzeigen:

(initdia)
(command "insert")

Um das Dialogfeld Einfügen auch weiterhin mit Ihren AutoLISP-Programmen anzuzeigen, müssen Sie Ihre vorhandenen Programme so ändern, dass einer dieser Ansätze genutzt wird:

  • (initcommandversion 2)
    (initdia)
    (command "insert")
  • (command "classicinsert")

AutoCAD 2019-basierte Produkte und spätere Versionen

LOCALE (Systemvariable)

Die Systemvariable LOCALE gibt jetzt einen Code zurück, der eine Abkürzung aus mindestens zwei Buchstaben enthält, die die aktuelle Sprache darstellt, und nicht eine Abkürzung aus drei Buchstaben, die eine Sprache und Sprachvariante darstellt. Die aus mind. zwei Buchstaben bestehende Abkürzung basiert auf der Windows-Funktion GetLocaleInfo, die die Konstante LOCALE_SISO639LANGNAME verwendet.

In Vorgängerversionen von AutoCAD 2019-basierten Produkten bestand der Code aus einer Abkürzung mit drei Buchstaben, die von der Windows-Funktion GetLocaleInfo unter Verwendung der Konstanten LOCALE_SABBREVLANGNAME zurückgegeben wurde. Die aus drei Buchstaben bestehende Abkürzung bestand aus zwei Datenquellen; einem aus zwei Buchstaben bestehenden Sprachenkürzel und einem dritten Buchstaben, der die Sprachvariante angab. Beispiel: ENU stellte die Kombination der englischen Sprache (EN) und den Vereinigten Staaten (United States, U) als Sprachvariante dar.

AutoCAD 2017-basierte Produkte und spätere Versionen

CDATE, DATE und andere datums-\zeitbezogene Systemvariablen

Die in den Systemvariablen CDATE und DATE gespeicherten Werte stellen nicht mehr das/die auf eine Millisekunde oder eine Hundertstelsekunde genaue aktuelle Datum/Uhrzeit dar. Sekunden stellen nun die kleinste Zeiteinheit dar, in der die Werte dieser beiden Systemvariablen ausgedrückt werden. Wenn Sie die Zeitintervalle in einer kleineren Einheit als eine Sekunde nachverfolgen müssen, sollten Sie den von der Systemvariable MILLISECS zurückgegebenen Wert berücksichtigen, der die Zeitdifferenz seit dem Start der Arbeitsstation in Millisekunden speichert.

Die folgenden datums-\zeitbezogenen Systemvariablen waren auch durch das Entfernen der Millisekunden betroffen:

  • TDCREATE
  • TDINDWG
  • TDUCREATE
  • TDUPDATE
  • TDUSRTIMER
  • TDUUPDATE

Wenn Sie bei einem Ihrer vorhandenen Programme den Zeitunterschied bis zur nächsten Millisekunde benötigen, können Sie die letzten zwei oder drei Ziffern des in der Systemvariable MILLISECS gespeicherten Werts abrufen und diese an den von der Systemvariable CDATE ausgegebenen Wert anhängen. So entsteht ein Wert, der mit dem von der Systemvariable CDATE bei AutoCAD 2016-basierten Produkten und Produkten einer früheren Version vergleichbar ist. Das folgende Codebeispiel zeigt, wie Sie basierend auf der Ziel-AutoCAD-Version einen Wert für Datum/Zeit mit Millisekunden abrufen können:

; Returns a CDATE value that includes milliseconds based on release
; Usage: (CDate)
; Replaces (rtos (getvar "CDATE") 2 8)
(defun CDate ( / ms)
  ; Check to see which AutoCAD release is being used
  (if (<= (atof (getvar "ACADVER")) 22.0)
    (rtos (getvar "CDATE") 2 8)
    (progn
      ; Get the current milliseconds and append it to the CDATE value
      (setq ms (itoa (getvar "MILLISECS")))
      (strcat (rtos (getvar "CDATE") 2 6)(substr ms (- (strlen ms) 2)))
    )
  )
)
Systemvariable EPDFSHX

Die Systemvariable EPDFSHX auf AutoCAD 2016 Update 1 eingeführt wurde in PDFSHX umbenannt. Aufgrund dieser Namensänderung müssen alle AutoLISP-Anweisungen, die auf die Systemvariable EPDFSHX verweisen, überarbeitet werden. Dies sind die Funktionen, die höchstwahrscheinlich durch diese Änderung in Ihren benutzerdefinierten Programmen betroffen sind:

  • GETVAR – Anstelle einer Ganzzahl von 0 oder 1 wird ein Wert Null zurückgegeben.
  • SETVAR – Die Ausführung des Programms wird möglicherweise angehalten und die Fehlermeldung ; Fehler: Einstellung für AutoCAD-Variable zurückgewiesen: "epdfshx" wird erstellt.
  • COMMAND – Die Ausführung des Programms wird möglicherweise angehalten und die Fehlermeldung EPDFSHX Unbekannter Befehl "EPDFSHX" wird erstellt.

AutoCAD 2016-basierte Produkte und spätere Versionen

Digital signierte Dateien

Jetzt können AutoLISP-Dateien digital signiert werden. Durch das digitale Signieren kann eine AutoLISP-Datei ohne Warnung der Benutzer, dass die Datei nicht vertrauenswürdig ist, in die AutoCAD-Zeichnungsumgebung geladen werden. Digital signierte VLX-Dateien können nicht in auf AutoCAD 15 oder früher basierende Produkte geladen werden.

OFang-Funktion

Die Funktion OFang unterstützt nicht mehr den Objektfangmodus qui. Verweise auf die qui entfernt werden muss, verwenden Sie die alle OFANG-Funktionen in Ihren AutoLISP-Anwendungen verwenden. Wenn der Modus nicht entfernt wird, geben die OFang-Funktionen NULL anstelle eines Koordinatenwerts für einen gültigen Punkt im Zeichenbereich zurück.