2011-12-12 14 views

risposta

6

Ho risolto questo problema scrivendo un wrapper activex/COM per la mia DLL, che a mio avviso dovrebbe facilitare il collegamento in futuro. Avvio di una discussione su the swamp ha prodotto alcune risposte da persone piacevoli su come chiamare COM da Visual Lisp. Per la cronaca, sembra qualcosa del genere:

//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

Si espone il codice C++ nativo a AutoLisp utilizzando le chiamate API acedDefun() e acedRegFunc().

Here è una discussione sul forum di programmazione di Autodesk che richiede esattamente la tua domanda.

+1

Mi sembra una domanda leggermente diversa - il poster ha creato un'app ObjectARX che è una cosa che sto cercando di evitare. Mi piacerebbe chiamare una DLL esistente da Lisp, idealmente senza modificare la DLL. È possibile? –

+1

So che AutoLisp ha alcuni aggancio COM, ma non posso commentare questo approccio perché non l'ho usato personalmente. Ho sempre pensato che costruire un connettore ObjectARX (o equivalente .NET) sottile .dll fosse l'approccio più semplice. (Ma poi di nuovo sono stato un programmatore C++ per decenni :) –

Problemi correlati