Visual Lisp: как вызывать функции во внешней C++ DLL
У меня есть C++ dll, который я написал (нативный, а не.net), и я хотел бы использовать его функциональность из Visual Lisp. Может кто-нибудь указать мне пример того, как это сделать, или, по крайней мере, какую часть документации читать?
2 ответа
Решение
Я решил это, написав обертку activex/COM для моей dll, которая, по моему мнению, должна упростить ссылки в будущем. Начало потока на болоте дало некоторые ответы от хороших людей о том, как вызвать COM из Visual Lisp. Для справки, это выглядит примерно так:
//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
Вы предоставляете свой собственный код C++ для AutoLisp, используя вызовы API acedDefun() и acedRegFunc().
Вот обсуждение на форуме Autodesk по программированию, в котором задается именно ваш вопрос.