C로 작성된 GLib 기반 라이브러리의 경우 C 소스에서 Vala/Bindings의 gir 파일을 생성하려고 할 수 있습니다.
수동으로 수행하는 것도 문제가되지 않습니다. 문자열을 취하는 do_something이라는 메서드로 C에서 SomelibClass1을 정의하는 라이브러리가 있다고 가정합니다. 헤더 파일의 이름은 "somelib.h"입니다. 그러면 해당 vapi는 다음과 같이 간단합니다.
somelib.VAPI : 비 입심 라이브러리에 대한 쓰기 vapis에 대한
[CCode (cheader_filename="somelib.h")]
namespace Somelib {
public class Class1 {
public void do_something (string str);
}
}
문서는 여기에서 찾을 수 있습니다 : Vala/LegacyBindings
이 실제로 정말 간단합니다.
[Compact]
[CCode (cname = "FILE", free_function = "fclose", cheader_filename = "stdio.h")]
public class FILE {
[CCode (cname = "fopen")]
public static FILE? open (string path, string mode);
[CCode (cname = "fgets", instance_pos = -1)]
public unowned string? gets (char[] s);
}
이는 다음 C-기능을 구현한다 :
FILE *fopen (const char *path, const char *mode);
char *fgets (char *s, int size, FILE *stream);
instance_pos 폐기
발라 개체는 방법 첫번째 파라미터라고 가정 특성 posix.vapi 발췌문을하자. 이 방법으로 대략 객체 지향적 인 c-construct를 묶는 것이 가능합니다. 컴팩트 클래스의 free_method는 객체가 참조 해제 될 때 호출됩니다.
등 메서드, 클래스, 구조체의 CCODE (CNAME) -attribute는 C.에있을 것 같은 그것의 이름이어야
이 주제에 대한 더 많은있다
하지만,이 일반적인 개요를 제공해야합니다.
고마워요! 내가 가지고있는 한가지 문제점은 myfunc.vapi에 헤더 파일을 지정할 때, valac의 .c 출력에 #include ""이 쓰일 때 실제로 원하는 것은 #include "myfunc.h"입니다. 어떤 생각이 어떻게 해결할 수 있습니까? 해결할 수 있습니까? –
Jordan
파일이 시스템 include에 설치되어 있지 않으면 경로를 -I로 제공하면 프로젝트 디렉토리에 파일이 열립니다 (예 : -I $ (topsrc_dir))/libfoo) – elmarco