AutoLISP 程式通常很少需要為了在最新版本中執行而變更。
但是,AutoLISP 程式在最新版本中可能無法正常執行,因為 AutoLISP 函數或 AutoCAD 系列產品的指令或系統變數已變更或已棄用。
檢閱您的自訂程式是否有指令和系統變數已指定為「舊型」。在某些情況下,即使無法在指令提示下直接輸入或從使用者介面存取的舊型指令或系統變數,仍可由您的自訂程式使用。
嘗試在自訂程式中使用舊型指令或系統變數時,下列技巧可能有用:
AutoLISP 環境已更新為支援 Unicode 字元,這會影響用來操控或傳回字串值的函數。如需哪些函數已更新為支援 Unicode 的更多資訊,請參閱 AutoLISP 的新增功能或變更功能。
根據程式中使用的函數,您可能需要變更這些函數才能處理 Unicode 字元。例如,與舊版相比,當某個 Unicode 字元傳給 ASCII 函數時,傳回值現在可以大於 255 或不同。您可以使用 LISPSYS 系統變數來識別和控制載入至程式的預設 AutoLISP 環境;0 和 2 = MBCS 支援 (舊式環境),1 = Unicode 支援。
下列程式碼片段顯示如何判斷哪個 AutoLISP 環境目前已載入至程式,以及如何根據載入的環境控制程式碼執行:
(if (= (getvar "LISPSYS") 1) (alert (strcat "Unicode support enabled" "\n(ASCII \"€\") returns 8364" ) ) (alert (strcat "MBCS (Legacy) support enabled" "\n(ASCII \"€\") returns 128" ) ) )
INSERT 指令現在會顯示「圖塊」選項板,而新的 CLASSICINSERT 指令會顯示「傳統」的「插入」對話方塊。如果您的 AutoLISP 程式必須使用「插入」對話方塊,則必須變更您現有的程式。您之前可能使用了以下 AutoLISP 陳述式顯示「插入」對話方塊:
(initdia) (command "insert")
若要繼續使用 AutoLISP 程式顯示「插入」對話方塊,則必須變更您現有的程式使用以下其中一種方法:
(initcommandversion 2) (initdia) (command "insert")
(command "classicinsert")
LOCALE 系統變數現在傳回的代碼包含代表目前語言的二字母或多字母縮寫,而不是代表語言和子語言的三字母縮寫。二字母或多字母縮寫是根據使用 LOCALE_SISO639LANGNAME 常數的 Windows GetLocaleInfo 函式。
在 AutoCAD 2019 系列產品之前,代碼是一個由 Windows GetLocaleInfo 函式使用 LOCALE_SABBREVLANGNAME 常數傳回的三字母縮寫。三字母縮寫是根據兩項資訊:二字母的語言縮寫,加上指出子語言的第三個字母。例如,ENU 代表英文語言 (EN) 與做為子語言的美國 (U) 的組合。
儲存在 CDATE 與 DATE 系統變數中的值不再以最接近的毫秒或百分之一秒來表示目前的日期/時間。這兩個系統變數現在都以最小的時間單位「秒」來表示值。如果您需要追蹤小於一秒的時間間隔,請考慮使用 MILLISECS 系統變數傳回的值,此變數儲存工作站自開機後的時間差,以毫秒為單位。
以下日期/時間相關系統變數也會受到移除毫秒的影響:
如果您任何既有的程式需要最接近毫秒的時間差異,您可以取得儲存在 MILLISECS 系統變數中最後 2 位數或 3 位數的值,然後將它們附加到 CDATE 系統變數傳回的值,這樣產生的值就會與 AutoCAD 2016 系列產品和更早版本中 CDATE 系統變數傳回的值差不多。下列程式碼範例顯示如何根據目標 AutoCAD 版本,取得包括毫秒的日期/時間值:
; 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))) ) ) )
隨 AutoCAD 2016 Update 1 引入的 EPDFSHX 系統變數已更名為 PDFSHX。因為名稱變更,所以必須修訂參考 EPDFSHX 系統變數的所有 AutoLISP 陳述式。在您的自訂程式中,以下這些函數最有可能受到此變更的影響:
現在可以用數位方式簽署 AutoLISP 檔案。以數位方式簽署 AutoLISP 檔案,可以讓檔案載入至 AutoCAD 圖面環境中,而不會對使用者顯示檔案未受信任的警告訊息。已經過數位簽署的 VLX 檔案無法載入至 AutoCAD 2015 系列產品或更早版本的產品中。
osnap 函數不再支援快速 (qui) 物件鎖點模式。在 AutoLISP 程式中,必須從使用 osnap 函數的所有陳述式移除 qui 模式的參考。如果未移除模式,osnap 函數會針對繪製區中的有效點傳回 nil,而不是座標值。