首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Windows上使用C++中的SWIG for D?

如何在Windows上使用C++中的SWIG for D?
EN

Stack Overflow用户
提问于 2013-05-12 07:12:23
回答 2查看 468关注 0票数 1

我想用D中的LEAP运动。

因此,它没有C库,只有C++库。

我试着在命令下喝了2.0.9。

代码语言:javascript
复制
swig -c++ -d -d2 leap.i 

此命令输出Leap.d、Leap_im.d、Leap_wrap.cxx、Leap_wrap.h.

但是,我不知道如何在D中使用包装器,也找不到如何使用包装器。

链接错误显示以完整地使用它。

如何在D2中使用这些包装器?

我可以不使用Leap.cpp (Leap.dll的源代码)吗?

更新:

谢谢两个答案。很抱歉因为忙而迟了回复。

第一个结论是,我可以按照以下步骤在Win64上构建Leap示例代码。

  1. 输出包装器通过上面的命令.
  2. 使用VC2010从Leap_wrap.cxx、Leap_wrap.h和导入Leap.lib( x64 )创建x64 DLL。
  3. 用dmd . -c.编译Leap.d和Leap_im.d
  4. 用Leap.obj和Leap_im.obj构建LeapTest.d

所有命令都在下面。

代码语言:javascript
复制
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计划。

但程序crach onFrame事件回调。

我将在x86上再试一次,并调查原因。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-13 09:39:35

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

  • http://klickverbot.at/blog/2010/11/announcing-d-support-in-swig/
  • http://www.swig.org/Doc2.0/D.html
  • http://www.swig.org/tutorial.html

我个人从未使用过酒杯,但我的猜测是基于对酒杯的一般了解:

  • Leap_wrap.cxx是C++源文件,它在extern(C)调用中封装目标库对C++函数的调用。
  • Leap_wrap.h是头文件,列出了所有外挂(C)包装器
  • Leap_im.d是基于Leap_wrap.h的D模块,具有相同的输出(C)函数。
  • D是D模块,它使用Leap_im.d作为实现,并复制类似于原始C++的API。

因此,在您的D代码中,您希望导入Leap.d模块。而不是使用Leap_wrap.cxx编译器将C++编译成对象文件,并在链接阶段提供D对象文件、Leap_wrap.o和目标库。这应该能起作用。

不需要P.S. Leap.cpp源。所有的东西链接直接从Leap_wrap.cxx到目标库二进制。

票数 2
EN

Stack Overflow用户

发布于 2013-05-13 08:15:19

转到IRC,FreeNode,或OFTC,频道#D,为了帮助你,我们必须看看这些文件里有什么。我的第一个猜测是,您必须将D文件和C++文件编译成对象文件,并将它们链接到一起。我想SWIG将把C++ API压缩成一组C函数,这可能就是Leap_wrap.cxx所做的。

如果LEAP并不复杂(即。仅仅是一堆简单的C++类),它可能有可能直接与它接口。在这里阅读更多关于它的信息:interface.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16505047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档