1

LEAP Motion を D で使いたいので、
C ライブラリがなく、C++ ライブラリしかありません。
コマンドの下でSWIG 2.0.9を試しました。

swig -c++ -d -d2 leap.i 

このコマンドは、Leap.d、Leap_im.d、Leap_wrap.cxx、Leap_wrap.h を出力します。
しかし、D でラッパーを使用する方法がわからず、ラッパーの使用方法が見つかりません。
リンクエラーが表示されますので、そのままご使用ください。
これらのラッパーを D2 でどのように使用しますか?
また、Leap.cpp (Leap.dll のソース) なしで使用できますか?

アップデート:

2つの回答ありがとうございます。そして忙しくて返事が遅くなってすみません。
以下の手順に従って、Win64 で Leap サンプル コードをビルドできたという最初の結論を述べます。

  1. 上記のコマンドでラッパーを出力します。
  2. Leap_wrap.cxx、Leap_wrap.h から VC2010 で x64 DLL を作成し、Leap.lib(x64) をインポートします。
  3. Leap.d と Leap_im.d を dmd -c でコンパイルします。
  4. Leap.obj と Leap_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 プログラムを実行できました。
ただし、プログラムは onFrame イベント コールバックをクラッシュさせます。
x86 で再試行し、原因を調査します。

4

2 に答える 2

2

いくつかの役立つリンク (一部の情報は古くなっている可能性があります):

私は SWIG を個人的に使用したことはありませんが、SWIG に関する一般的な知識に基づいて推測します。

  • Leap_wrap.cxx は、ターゲット ライブラリからの C++ 関数への呼び出しを extern(C) 呼び出しでラップする C++ ソース ファイルです。
  • Leap_wrap.h は、すべての extern(C) ラッパーがリストされたヘッダー ファイルです。
  • Leap_im.d は、同じ extern(C) 関数がリストされた Leap_wrap.h に基づく D モジュールです。
  • Leap.d は、Leap_im.d を実装として使用し、元の C++ のものと同様の API を再現する D モジュールです。

したがって、D コードで Leap.d モジュールをインポートする必要があります。C++ コンパイラで Leap_wrap.cxx をオブジェクト ファイルにコンパイルし、リンク段階で D オブジェクト ファイル、Leap_wrap.o、およびターゲット ライブラリを提供します。これでうまくいくはずです。

PS Leap.cpp ソースは必要ありません。すべてのものは、Leap_wrap.cxx からターゲット ライブラリ バイナリに直接リンクします。

于 2013-05-13T09:39:35.530 に答える