2017-02-11 4 views
0

the official website of gobject에서 우리가 읽을 수어떤 방법으로 객체를 바인딩하는 것이 용이합니까?

G 객체, 그 낮은 수준의 형식 시스템, GType가 제공하는 GTK + 대부분의 GNOME 라이브러리에 의해 사용됩니다

  • 은 객체 지향 C 기반 API와 다른 컴파일 또는 해석 언어에
  • 자동 투명 API 바인딩
,

첫 번째 부분은 나에게 분명하지만 두 번째 부분은 분명하지 않습니다.

실제로 개체와 바인딩에 대해 이야기 할 때 도입 된 개념은 종종 개체 - 소개 (gobject-intropspection)이지만, 이해할 수있는 한 gobject-introspection을 사용하여 문서화 된 C 라이브러리의 .gir 및 .typelib를 만들 수 있습니다. gobject 기반 라이브러리 용.

그러므로 나는 특히 바인딩 친화적 인 G 객체 무엇이 궁금합니다.

답변

2

내가 이해하는 한, gobject-inrospection은 gobject 기반 라이브러리뿐만 아니라 문서화 된 C 라이브러리의 .gir 및 .typelib를 만드는 데 사용할 수 있습니다. 실제로 정말 사실이 아니다

. 아주 기본적인 것들을 할 수 있지만 직접 소스 코드를 검사하는 프로그램을 실행하는 대신 GIR을 직접 작성해야합니다. 제가 알고있는 유일한 사람은 those distributed with gobject-introspection합니다 (* .gir 파일, 순환 종속성을 피하기 위해이있는 * .c 인 파일), 그리고 심지어는 일반적으로 C의 API의 매우 작은 부분 집합이다.

다른 기능에 관해서는, G 객체의 거의 모든 ... 도움이되는 기본적인 아이디어는 바인딩이 종종 RTTI를 필요로한다는 것이다. GValue (값 + 타입 정보를 저장하는 간단한 상자) (콜백) GClosure 등 가지 유형, 속성 및 신호 등 GType S, 함께 자신을 설명한다. GObject를 사용하여 (새로운 기본 유형을 만드는 대신) 상속 및 인터페이스에 대한 런타임 데이터를 얻고 GObject의 이상한 구성 체계는 다른 언어로 C 언어로 선언 된 유형을 서브 클래스화할 수 있습니다.

이유는 g-ir-scanner은 비 GObject 라이브러리에서 실제로 많은 것을 할 수 있다는 것은 모든 정보가 빠져 있다는 것입니다. 주석을 찾는 소스 코드를 스캔 한 후 g-ir-scanner은 실제로 컴파일 된 모듈을로드하고 GObject의 API를 사용하여이 정보를 수집합니다 (크로스 컴파일이 어렵습니다). 다시 말해, GObject-Introspection은 생각보다 훨씬 작은 프로젝트입니다 ... GObject API에서 가져 오는 데이터의 상당 부분입니다.

+0

덕분에, 나는 g-IR-scanner'가 G 객체이 방법을 사용했다'알고하지 않았다. RTTI는 비 해석 언어에 정말 유용합니까? 예를 들어 PyGObject에서 성공적으로 사용되었지만 컴파일 된 언어로 이해할 수 있습니까? – eponier

+1

당신이/해석/동적으로 타이핑하면 /는 더 이해가됩니다. 하지만 그 대답은 '예'입니다. 그것은 정적 타입 정보를 가지고 있지 않을 때 더 유용 합니다만, C에서 GValue와 같은 것을 사용하거나 GType 파라미터를 추가하여 같은 코드를 반복해서 재 작성하는 것을 피할 수있는 경우가 많이 있습니다. – nemequ

+0

마지막 문장을 보여주는 예를 들어 주시겠습니까? – eponier