Visual Lisp:如何调用外部 C++ DLL 中的函数
Posted
技术标签:
【中文标题】Visual Lisp:如何调用外部 C++ DLL 中的函数【英文标题】:Visual Lisp: how to call functions in external C++ DLL 【发布时间】:2012-01-18 15:35:48 【问题描述】:我有一个我编写的 C++ dll(本机,而不是 .net),我想使用 Visual Lisp 中的功能。谁能给我举个例子来说明如何做到这一点,或者至少要阅读哪些文档?
【问题讨论】:
【参考方案1】:我通过为我的 dll 编写一个 activex/COM 包装器解决了这个问题,我认为它应该使将来更容易链接到。在the swamp 上启动一个线程从好人那里得到了一些关于如何从 Visual Lisp 调用 COM 的答案。作为记录,它看起来像这样:
//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
【讨论】:
【参考方案2】:您使用 acedDefun() 和 acedRegFunc() API 调用将您的本机 C++ 代码公开给 AutoLisp。
Here 是 Autodesk 编程论坛上的一个讨论,正是询问您的问题。
【讨论】:
这对我来说似乎是一个稍微不同的问题 - 海报制作了一个 ObjectARX 应用程序,这是我试图避开的东西。我想从 lisp 调用现有的 DLL,最好不要修改 DLL。这可能吗? 我知道 AutoLisp 有一些 COM 钩子,但我不能真正评论这种方法,因为我没有亲自使用过它。我一直认为构建一个瘦 ObjectARX(或 .NET 等效)连接器 .dll 是更简单的方法。 (但话说回来,我几十年来一直是 C++ 程序员 :)以上是关于Visual Lisp:如何调用外部 C++ DLL 中的函数的主要内容,如果未能解决你的问题,请参考以下文章
C++ Visual Studio Windows:如何在 dll 中声明但不定义外部函数
Visual C++ 2010 / QT:为啥调用类的赋值运算符?
在 C++ (Visual Studio) 中查找函数的调用者