2011-12-12 30 views

Respuesta

6

Lo resolví escribiendo un contenedor activex/COM para mi dll, que creo que debería facilitar el enlace en el futuro. Comenzar un hilo en the swamp dio algunas respuestas de gente amable acerca de cómo llamar a COM desde Visual Lisp. Para el registro, se ve algo como esto:

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

Expone su código C++ nativo a AutoLisp utilizando las llamadas API acedDefun() y acedRegFunc().

Here es un debate en el foro de programación de Autodesk que hace exactamente su pregunta.

+1

Eso me parece una pregunta un tanto diferente: el póster ha hecho una aplicación ObjectARX que es algo que trato de evitar. Me gustaría llamar a una DLL existente de lisp, idealmente sin modificar la DLL. ¿Es eso posible? –

+1

Sé que AutoLisp tiene algunos ganchos COM, pero realmente no puedo comentar sobre ese enfoque ya que no lo he usado personalmente. Siempre pensé que la construcción de un .dll conector delgado ObjectARX (o .NET equivalente) era el enfoque más fácil. (Pero, de nuevo, he sido programador de C++ durante décadas :) –

Cuestiones relacionadas