2011-12-12 24 views

Trả lời

6

Tôi đã giải quyết vấn đề này bằng cách viết một trình bao bọc activex/COM cho dll của tôi, mà tôi nghĩ sẽ giúp bạn dễ dàng liên kết trong tương lai. Bắt đầu một chuỗi trên the swamp mang lại một số câu trả lời từ những người tốt đẹp về cách gọi COM từ Visual Lisp. Đối với hồ sơ, nó trông giống như thế này:

//in c++... (header and IDL file also needed) 
hresult timestwo(double in,double* out) 
{ 
    *out = in*2; 
    return S_OK; 
} 

;; in Lisp... 
(vl-load-com) 
(setq myinstance (vlax-create-object "mycomwrapperdll.mycomwrapperclass")) 
(setq num 12.34) 
(vlax-invoke-method myinstance 'timestwo num 'newnum) 
(vlax-release-object myinstance) 
;; newnum now contains 24.68 
4

Bạn hiển thị mã C++ gốc của mình cho Tự động đánh dấu bằng cách sử dụng lệnh gọi API acedDefun() và acedRegFunc().

Here là cuộc thảo luận trên diễn đàn lập trình của Autodesk hỏi chính xác câu hỏi của bạn.

+1

Trông giống như một câu hỏi hơi khác với tôi - áp phích đã tạo ra ứng dụng ObjectARX mà tôi đang cố gắng tránh xa. Tôi muốn gọi một DLL hiện có từ lisp, lý tưởng mà không sửa đổi DLL. Điều đó có thể không? –

+1

Tôi biết rằng AutoLisp có một số móc COM, nhưng tôi không thể thực sự bình luận về cách tiếp cận đó vì tôi đã không đích thân sử dụng nó. Tôi luôn nghĩ rằng việc xây dựng một trình kết nối ObjectARX mỏng (hoặc .NET tương đương) là cách tiếp cận dễ dàng hơn. (Nhưng sau đó một lần nữa tôi đã là một lập trình viên C++ trong nhiều thập kỷ :) –