Обычно C указатели API переводятся либо arrays
или out
параметров в Vala привязок:Как связать задержанный параметр?
// C
void get_user_name (char *buffer, int buffer_length);
void get_user_count (int *count_ptr);
// Vala
public static void get_user_name (uint8[] buffer);
public static void get_user_count (out int count);
Я теперь попадались случае, когда указатель используется в качестве задержанного out
параметра.
// C
void bind_buffer (void *buffer, int buffer_length, int *length);
int fetch (void);
Каждый раз, когда fetch()
называется, данные передаются buffer
и length
.
Каков наилучший способ привязки такого API в Вала?
// Vala
public static void bind_buffer (uint8[] buffer, int *length);
public static int fetch();
Я не думаю, что могу использовать out int length
здесь?
Также я должен убедиться, что связанные данные доступны все время, пока они все еще связаны. Как я могу это достичь?
Я удалил атрибуты CCode для моего вопроса, так как они здесь не актуальны (как вы писали). –
В API есть еще более безумные вещи (например, void *, которые принимают другие указатели в зависимости от параметров типа): \ –
Возможно, вы захотите использовать общие для них или, возможно, создать версию для каждого типа со значениями по умолчанию для типа. – nemequ