LINUX.ORG.RU

Возможно ли сделать обёртку к cpp-библиотеке для её использования в Vala?

 , , , ,


0

2

Нужны 4 функции из cpp-библиотеки для использования в Vala-проекте.

Идея такая:

  1. Пишем враппер на Си на 4 финкциии к cpp-библиотеке и компилируем её как библиотеку.
  2. Пишем vapi к Си-библиотеке (Си-враперу у которой в зависимостях cpp-библиотека).
  3. Используем Си-библиотеку в Vala-проекте.

Сработает? Или я в чём-то ошибаюсь?

★★

Даже враппер писать не нужно, если у своей крестовой библиотеки сделаешь нормальный хэдер с:

#ifdef __cplusplus
extern "C" {
#endif

// your definitions here

#ifdef __cplusplus
}
#endif

CYB3R ★★★★★ ()
Ответ на: комментарий от CYB3R

Даже враппер писать не нужно, если у своей крестовой библиотеки сделаешь нормальный хэдер с

Речь про libmp4v2.

nvl ★★ ()
Ответ на: комментарий от nvl

Посмотрел сорцы. Там всё под extern «C».

И враппер писать не надо, всё уже сделано. Достатчно просто слинковаться.

a1batross ★★★★★ ()
Ответ на: комментарий от a1batross

В таком случае даже делать ничего не надо: написал VAPI, написал код, собрал, работает.

CYB3R ★★★★★ ()
Ответ на: комментарий от a1batross

Ну так что, Vala развивается? Какова поддержка в каких IDE? При компиляции дает внятные сообщения по исходному Vala-коду? Будет ли ValaQt5?

Мне всегда казалась концепция Vala очень мощной и перспективной, буду рад узнать что дела идут в гору.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Ну так что, Vala развивается?

Силами сообщества развивается потихоньку.

Какова поддержка в каких IDE?

Есть несколько IDE, поддерживающих Vala, даже пара-тройка Vala-специфичных, но сейчас почти все разработчики сфокусировались на GNOME Builder.

При компиляции дает внятные сообщения по исходному Vala-коду?

Конечно.

Будет ли ValaQt5?

Не знаю о таких планах. Конечно, нет ничего невозможного, но проект Qt не предоставляет нормальных биндингов, а без них, естественно ничего не будет. Вряд ли такое проект вообще целесообразен.

CYB3R ★★★★★ ()
Ответ на: комментарий от CYB3R

С написанием VAPI попал в просак, как-то сложно и не понятно. Вариант с прослойкой на Си выглядит проще. Читаю: https://wiki.gnome.org/Projects/Vala/LegacyBindings Отпять натолкнулся на:

If the library is written in C++, you cannot bind it to Vala unless there is a separate C binding of the C++ library (e.g., LLVM).

Еще раз спрошу, под «C binding» имеется в виду только хидер mp4v2.h?:

#ifdef __cplusplus
extern "C" {
#endif
/*****************************************************************************/
#include <mp4v2/general.h>
#include <mp4v2/file.h>
#include <mp4v2/file_prop.h>
#include <mp4v2/track.h>
#include <mp4v2/track_prop.h>
#include <mp4v2/sample.h>
#include <mp4v2/chapter.h>
#include <mp4v2/itmf_generic.h>
#include <mp4v2/itmf_tags.h>
#include <mp4v2/streaming.h>
#include <mp4v2/isma.h>
/*****************************************************************************/
/* restore macro DEFAULT to state prior to mp4v2 headers */
#undef DEFAULT
#if defined( __MP4V2_SAVE_DEFAULT )
#   define DEFAULT __MP4V2_SAVE_DEFAULT
#endif

И то, что в дочених хидерах (напимер mp4v2/file.h), в которых непосредственно прототипы функций, отсуствует extern «C», никак не влияет на возможность создания vapi-биндинга?

nvl ★★ ()
Ответ на: комментарий от CYB3R

Бросил в файл несколько фукций и не знаю, что дальше делать

CCode (cprefix = "", lower_case_cprefix = "", cheader_filename = "mp4v2.h")]
namespace mp4 {


	[CCode (cheader_filename = "mp4v2/file.h", cname="MP4Close")]
	public void close(MP4FileHandle hFile,  uint32_t    flags DEFAULT(0) );

	[CCode (cheader_filename = "mp4v2/file.h", cname="MP4Read")]
	public MP4FileHandle read(const char* fileName );

В частности, что делать с типом MP4FileHandle...

«Если метод тыка не помагает, прочитайте инструкцию ©» Вот начал читать https://wiki.gnome.org/Projects/Vala/LegacyBindings

nvl ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.