Как использовать SWIG для D из C ++ в Windows?

Я хочу использовать 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)?

Обновить:

Спасибо два ответа. и извините за поздний ответ из-за занятости.
Скажите первый вывод: я мог бы создать пример кода Leap на Win64, выполнив следующие шаги.

  1. Выведите обертки по вышеуказанной команде.
  2. Создайте x64 DLL с VC2010 из Leap_wrap.cxx, Leap_wrap.h и импортируйте Leap.lib (x64).
  3. Скомпилируйте Leap.d и Leap_im.d с помощью команды dmd -c.
  4. Сборка LeapTest.d с помощью Leap.obj и Leap_im.obj

Вся команда ниже.

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 и выясню причины.

1

Решение

Несколько полезных ссылок (некоторая информация может быть устаревшей):

Я никогда не использовал SWIG лично, но мое предположение основано на общих знаниях о SWIG:

  • Leap_wrap.cxx — это исходный файл C ++, который оборачивает вызовы функций C ++ из целевой библиотеки в вызовы extern (C)
  • Leap_wrap.h — заголовочный файл со всеми перечисленными обертками extern (C)
  • Leap_im.d — это D-модуль, основанный на Leap_wrap.h с той же функцией extern (C)
  • Leap.d — это D-модуль, который использует Leap_im.d в качестве реализации и воспроизводит API, аналогичный исходному C ++.

Итак, в вашем D-коде вы хотите импортировать модуль Leap.d. Затем скомпилируйте Leap_wrap.cxx в объектный файл с помощью компилятора C ++ и предоставьте объектные файлы D, Leap_wrap.o и целевую библиотеку на этапе компоновки. Это должно делать свое дело.

Постскриптум Источник Leap.cpp не должен быть нужен. Все вещи ссылаются непосредственно из Leap_wrap.cxx на целевой двоичный файл библиотеки.

2

Другие решения

Перейдите на IRC, либо FreeNode, либо OFTC, канал #D. Чтобы помочь вам, мы должны посмотреть, что находится в этих файлах. Мое первое предположение заключается в том, что вы должны скомпилировать как файлы D, так и файл C ++ в объектные файлы и связать их вместе. Я полагаю, что SWIG собирается объединить API C ++ в кучу функций C, и это, вероятно, то, что делает Leap_wrap.cxx.

Если API LEAP не сложен (т. Е. Представляет собой просто набор простых классов C ++), возможно, есть возможность напрямую взаимодействовать с ним. Об этом подробнее здесь: http://dlang.org/cpp_interface.html .

0

По вопросам рекламы [email protected]