Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
anonmyous

Có cách nào unload 1 file LISP

Các bài được khuyến nghị

Có cách nào Unload 1 file LISP ko các pác nhỉ, Load thì có (vl-load-all LISP-File) còn Unload thì dùng hàm gì bây giờ

Em thì em chỉ biết là Unload nó đi bằng cách load một Lisp khác. Hoặc Exit nó đi rồi Open lại.....còn không biết cách nào khác hơn. :lol:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Vấn đề đặt ra như sau :

1. Khi add 1 LISP vào Startup của CAD thì mặc nhiên khi mở 1 file nó sẽ LOAD tất cả các LISP có trong Startup

2. Khi 1 LISP ko được add vào CAD's Startup thì mỗi lần mở 1 file lại phải LOAD nó 1 lần.

3. Một LISP ko được add vào CAD's Startup nhưng lại được LOAD bằng 1 LISP khác (cũng ko có trong CAD's Startup) bẳng hàm vl-load-all thì lại mặc nhiên được LOAD cho file mới kể từ sau khi được gọi bằng hàm trên (chú ý : tất cả đều ko có trong CAD's Startup)

Vậy theo mình nghĩ phải có cách để loại nó ra khỏi bộ nhớ chứ nhỉ??? Đó là ý kiến của mình.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vấn đề đặt ra như sau :

1. Khi add 1 LISP vào Startup của CAD thì mặc nhiên khi mở 1 file nó sẽ LOAD tất cả các LISP có trong Startup

2. Khi 1 LISP ko được add vào CAD's Startup thì mỗi lần mở 1 file lại phải LOAD nó 1 lần.

3. Một LISP ko được add vào CAD's Startup nhưng lại được LOAD bằng 1 LISP khác (cũng ko có trong CAD's Startup) bẳng hàm vl-load-all thì lại mặc nhiên được LOAD cho file mới kể từ sau khi được gọi bằng hàm trên (chú ý : tất cả đều ko có trong CAD's Startup)

Vậy theo mình nghĩ phải có cách để loại nó ra khỏi bộ nhớ chứ nhỉ??? Đó là ý kiến của mình.

Ờ đúng đấy. Đôi khi dùng xong chức năng của Lisp nào đó rồi muốn unload nó đi để đỡ " đánh nhau" giữa các lisp khác nhau mà ko biết làm thế nào. Các cao thủ giúp một tay đi. :lol:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Ờ đúng đấy. Đôi khi dùng xong chức năng của Lisp nào đó rồi muốn unload nó đi để đỡ " đánh nhau" giữa các lisp khác nhau mà ko biết làm thế nào. Các cao thủ giúp một tay đi. :lol:

Có gì mà "óanh nhau". Cái sau sẽ đè lên cái trước nếu trùng. Nếu dùng cái load sau thì kg việc gì phải lo lắng cả. Nên unload là kg cần thiết. Chỉ khi nào dùng cái đã load trước thì mới có chuyện.

Vì vậy tốt nhất là ngay trước khi xài thì dù load rồi hay chưa cứ load lên lại là chắc ăn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Đây là một đoạn trích từ help

Unload/Remove

 

Unloads the selected applications or removes them from the History List. Unload is available only when a file is selected on the Loaded Applications tab. Remove is available only when you select a file on the History List tab.

 

LISP applications cannot be unloaded, nor can ObjectARX applications that are not registered for unloading.

 

Note that Remove does not unload the selected application. The Remove option is also available from a shortcut menu by right-clicking an application on the History List tab.

 

Như vậy là ko có cách nào unload lisp đã load trừ khi ...close file và open lại :lol: (Tất nhiên phải remove nếu đã trót đưa nó vào startup suite)

Có thể dùng mẹo nhỏ, tạo một file lisp với mẫu

(defun C:<Tên lệnh cần bỏ> ( / temp) (setq temp nil) )

(Phải đưa dòng setq vào vì defun ko cho fép định nghĩa 1 hàm mà ko làm gì cả - chuối thật!)

Rồi add vào startup, mỗi khi muốn bỏ lệnh nào thì thêm một dòng như trên vào, vậy là lệnh đó bị vô hiệu hoá mà ko cần đóng file mở lại (cách này có thể ko cần gỡ startup mà chỉ cần load file lisp vô hiệu hoá hàm sau cùng)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Có thể dùng mẹo nhỏ, tạo một file lisp với mẫu

(defun C: ( / temp) (setq temp nil) )

(Phải đưa dòng setq vào vì defun ko cho fép định nghĩa 1 hàm mà ko làm gì cả - chuối thật!)

Bạn có thể tạo hàm ngắn hơn như sau:

(defun C: () nil)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bạn có thể tạo hàm ngắn hơn như sau:

(defun C:<Tên lệnh cần bỏ> () nil)

Đúng rồi. Hay :lol: Thế mà ko nghĩ ra. Cảm ơn các bác :lol:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Đúng rồi. Hay :lol: Thế mà ko nghĩ ra. Cảm ơn các bác :lol:

Chả thấy hay tí nào. Giả sử trước khi load lisp ta có lệnh ABC thực hiện chức năng 1. lisp được load vào cũng có 1 lệnh là ABC sẽ thực hiện chức năng 2. mình muốn sau khi unload nó trả lại chức năng cũ của lệnh đó trước khi load. Ý của chủ topic chắc cũng giống ý này của mình.

Mục đích của việc này là để tạo ra sự linh động, người khác ngồi vào máy của mình nếu không quen với hệ thống tên lệnh của mình thì có thể unload nó đi 1 cách dễ dàng hơn.

 

Ẹc. ketxu xóa dùm mình 1 bài nhé. thank

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ồ,e thấy tắt đi rồi mở lại cũng đâu có lâu ^^

THeo e nghĩ, tốt nhất là tránh trùng lặp thôi. Đặt tên rõ ràng, hoặc đặc biệt, hoặc cho phép người dùng chọn lệnh thay thế ngay lúc load lisp

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

không đơn giản chỉ là tắt đi mở lại đâu ketxu. sẽ fải remove lisp ra khỏi startup suite truớc khi tắt bản vẽ. rồi lần sau muốn dùng thì lại fải mất công add lại rất là loằng ngoằng. làm 1, 2 lần không sao. nhưng thêm vài lần nữa là đã cảm thấy chán rồi.

ở cty mình có 1 bộ ứng dụng được áp dụng cho toàn cty, nhưng do trong quá trình làm việc mỗi người lại hình thành những thói quen nhất định theo tích chất công việc nên lại tự viết riêng ứng dụng cho minh, tên lệnh đè lên ứng dụng gốc là chuyện thường xuyên.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Vậy bác làm cái tự động add hoặc remove file lisp ra khỏi support :">

Và cho e hỏi là trong trường hợp của bác, cái code ABC đầu có thay đổi được không ?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tất nhiên là không được roài, bởi các lệnh của ứng dụng gốc được đóng gói vào 1 file FAS duy nhất, trong đó không chỉ có lệnh Lisp mà còn có cả các hàm con của nó.

cái mà mình muốn là 1 giải pháp loại bỏ triệt để mọi ứng dụng cá nhân ra khỏi bản vẽ 1 chỉ bằng 1 lệnh được nhúng trong chính ứng dụng đó cho nhanh gọn và tránh mọi xung đột có thể sảy ra. nó giống như là khi ta load 1 ứng dụng arx rùi sau khi không dùng nữa có thể unload nó ra khỏi bản vẽ mà không để lại dấu vết gì í.

Tiện thể cho mình hỏi, bạn có biết cách sử dụng hàm vl-unload-vlx không? mình đọc help mà làm hoài không fát nào trả về T được :(

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hàm con thì có thể gán cho các biến và reset lại nếu cần, còn C: thì e chưa tìm ra cách, thường bị lao vào tình trạng endless loop nếu cố gán C: lại lệnh cũ ^^

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

1. Nếu Bạn dùng Visual Lisp để tạo ứng dụng .VLX của Bạn. (bằng cách: File-> Make Application-> New Application Wizard trên menu của Visual Lisp ).

2. Và trong các tùy chọn của Wizard này Bạn chọn Expert và Separate namespace thì Bạn có thể Unload được ứng dụng đó.

Dùng hàm (vl-unload-vlx appname) để unload file .VLX.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×