C++ 如何从C++;在窗户上?

C++ 如何从C++;在窗户上?,c++,windows,swig,d,leap-motion,C++,Windows,Swig,D,Leap Motion,我想在D中使用跳跃动作。 因此它没有C库,它只有C++库。 我试着在命令下swig2.0.9 swig -c++ -d -d2 leap.i 此命令输出Leap.d、Leap\u im.d、Leap\u wrap.cxx、Leap\u wrap.h. 但是,我不知道如何使用D中的包装器,也找不到如何使用包装器。 显示链接错误,以便完整地使用它。 如何在D2中使用这些包装器? 我可以不使用Leap.cpp(Leap.dll的源代码)吗 更新: 谢谢两个答案。很抱歉,因为太忙,回复晚了。 第一个

我想在D中使用跳跃动作。
因此它没有C库,它只有C++库。 我试着在命令下swig2.0.9

swig -c++ -d -d2 leap.i 
此命令输出Leap.d、Leap\u im.d、Leap\u wrap.cxx、Leap\u wrap.h.
但是,我不知道如何使用D中的包装器,也找不到如何使用包装器。
显示链接错误,以便完整地使用它。
如何在D2中使用这些包装器?
我可以不使用Leap.cpp(Leap.dll的源代码)吗

更新: 谢谢两个答案。很抱歉,因为太忙,回复晚了。
第一个结论:我可以按照以下步骤在Win64上构建Leap示例代码。

  • 通过上述命令输出包装器。
  • 使用VC2010从Leap\u wrap.cxx、Leap\u wrap.h创建x64 DLL,并导入Leap.lib(x64)。
  • 使用dmd-c编译Leap.d和Leap\u im.d.
  • 使用Leap.obj和Leap\u im.obj构建LeapTest.d
  • 所有命令都在下面

    swig -c++ -d -d2 leap.i
    dmd -c Leap.d Leap_im.d -m64
    dmd LeapTest.d Leap.obj Leap_im.obj -m64
    execute LeapTest.exe (require x64 Leap.dll and Leap_wrap.dll)
    
    我可以运行Leap程序。
    但程序会在帧事件回调时崩溃。

    我将在x86上重试并调查原因。

    转到IRC,FreeNode或OFTC,channel#D。为了帮助您,我们必须查看这些文件中的内容。我的第一猜测是,你必须编译两个D文件,和C++文件到对象文件,并链接在一起。我想SWIG会将C++ API夷平为一堆C函数,这可能是LeAPuxRAPP.CXX所做的。

    如果LASIAPI不复杂(即,只是一组简单的C++类),就有可能直接与它进行接口。请在此处阅读更多信息:。

    一些有用的链接(一些信息可能已经过时):

    我从未亲自使用过SWIG,但根据对SWIG的一般知识,我猜测:

      的目标库中调用
    • Leap_wrap.h是列出了所有外部(C)包装器的头文件
    • Leap_im.d是基于Leap_wrap.h的d模块,列出了相同的extern(C)函数
    • Lig.d是使用LeaPixI.D作为实现的D模块,并复制与原始C++一个类似的API。
    因此,在您的D代码中,您希望导入Leap.D模块。比C++编译器编译LeAPuWrAP.cxx到对象文件,并在链接阶段提供D对象文件、LeaPyLabe.O和目标库。这应该能奏效

    不需要p.S.Leap.cpp源。所有内容直接从Leap_wrap.cxx链接到目标库二进制文件