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 中声明但不定义外部函数

将 C# 类库导入 Visual C++

Visual C++ 2010 / QT:为啥调用类的赋值运算符?

在 C++ (Visual Studio) 中查找函数的调用者

如何在 Visual C++ 中正确调用 CopyFile 函数?

如何在 Visual C++ 中使用 Delphi 的寄存器调用约定调用函数?