【问题标题】:Visual Lisp: how to call functions in external C++ DLLVisual Lisp:如何调用外部 C++ DLL 中的函数
【发布时间】:2012-01-18 15:35:48
【问题描述】:

我有一个我编写的 C++ dll(本机,而不是 .net),我想使用 Visual Lisp 中的功能。谁能给我举个例子来说明如何做到这一点,或者至少要阅读哪些文档?

【问题讨论】:

    标签: c++ dll autocad autolisp


    【解决方案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++ 程序员 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      相关资源
      最近更新 更多