นี่คือคำสั่ง gdbus-codegen ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
gdbus-codegen - รหัส D-Bus และตัวสร้างเอกสาร
เรื่องย่อ
gdbus-codegen [-h, --ช่วยด้วย] [--อินเทอร์เฟซ-คำนำหน้า org.project.คำนำหน้า]
[--สร้าง-c-code เอาท์ไฟล์] [--c-เนมสเปซ โครงการของคุณ]
[--c-สร้าง-ตัวจัดการวัตถุ] [--สร้าง-docbook เอาท์ไฟล์]
[--xml-ไฟล์ ไฟล์] [--หมายเหตุ ELEMENT KEY มูลค่า]... ไฟล์ [ไฟล์...]
DESCRIPTION
gdbus-codegen ใช้ในการสร้างรหัสและ/หรือเอกสารประกอบสำหรับ D-Bus . หนึ่งรายการขึ้นไป
อินเทอร์เฟซ เครื่องมืออ่าน ดีบัส วิปัสสนา XML[1] ไฟล์และสร้างไฟล์เอาต์พุต
ปัจจุบันเครื่องมือรองรับการสร้างรหัส C (ผ่าน --สร้าง-c-code) และ Docbook XML (ผ่าน
--สร้าง-docbook).
กำลังสร้าง C รหัส
เมื่อสร้างโค้ด C จะมีการสร้าง #GInterface -derived ประเภทสำหรับแต่ละอินเทอร์เฟซ D-Bus
นอกจากนี้ สำหรับทุกประเภทที่สร้างขึ้น ฟูบาร์, คอนกรีตสำเร็จรูปสองประเภท,
FooBarProxy และ FooBarโครงกระดูกการใช้งานอินเทอร์เฟซดังกล่าวจะถูกสร้างขึ้นด้วย อดีต
มาจาก #GDBusProxy และมีไว้สำหรับใช้ในฝั่งไคลเอ็นต์ในขณะที่ตัวหลังคือ
มาจากประเภท #GDBusInterfaceSkeleton ทำให้ง่ายต่อการส่งออกบน a
#GDBusConnection โดยตรงหรือผ่านอินสแตนซ์ #GDBusObjectManagerServer
ชื่อของแต่ละประเภท C ที่สร้างขึ้นนั้นมาจากชื่ออินเทอร์เฟซ D-Bus ที่ตัดด้วย
คำนำหน้าที่กำหนดด้วย --อินเทอร์เฟซ-คำนำหน้า และลบจุดและตัวอักษรเริ่มต้น
ตัวพิมพ์ใหญ่ ตัวอย่างเช่น สำหรับอินเทอร์เฟซ D-Bus com.acme.Coyote ชื่อที่ใช้คือ
คอมแอคมีโคโยตี้. สำหรับอินเทอร์เฟซ D-Bus org.project.Bar.Frobnicator ด้วย --อินเทอร์เฟซ-คำนำหน้า
org.project. ชื่อที่ใช้คือ BarFrobnicator
สำหรับวิธีการ สัญญาณ และคุณสมบัติ หากไม่ได้ระบุ ชื่อจะมีค่าเริ่มต้นเป็นชื่อ
วิธีการ สัญญาณ หรือคุณสมบัติ
ใช้ชื่อสองรูปแบบ - แบบฟอร์ม CamelCase และแบบฟอร์มตัวพิมพ์เล็ก คาเมลเคส
แบบฟอร์มใช้สำหรับ #GType และชื่อโครงสร้าง ในขณะที่รูปแบบตัวพิมพ์เล็กใช้ในฟังก์ชัน
ชื่อ. รูปแบบตัวพิมพ์เล็กคำนวณโดยการแปลงจาก CamelCase เป็นตัวพิมพ์เล็กและ
การแทรกขีดล่างที่ขอบเขตคำ (โดยใช้การวิเคราะห์พฤติกรรมบางอย่าง)
หากค่าที่กำหนดโดยหมายเหตุประกอบ org.gtk.GDBus.C.Name หรือ --c-เนมสเปซ ตัวเลือก
มีขีดล่าง (บางครั้งเรียกว่า น่าเกลียด_เคส) จากนั้นชื่ออูฐกรณีจะได้รับ
โดยการลบขีดล่างทั้งหมด และชื่อตัวพิมพ์เล็กได้มาจากตัวพิมพ์เล็ก
สตริง สิ่งนี้มีประโยชน์ในบางสถานการณ์ที่ใช้ตัวย่อ ตัวอย่างเช่น if
คำอธิบายประกอบจะใช้บนอินเทอร์เฟซ net.MyCorp.MyApp.iSCSITarget ด้วยค่า
iSCSI_Target แบบฟอร์ม CamelCase คือ iSCSITarget ในขณะที่รูปแบบตัวพิมพ์เล็กคือ iscsi_target
หากมีการใช้คำอธิบายประกอบในวิธี EjectTheiPod ด้วยค่า Eject_The_iPod ค่า
รูปแบบตัวพิมพ์เล็กคือ eject_the_ipod
กำลังสร้าง ด็อคบุ๊ค เอกสารฉบับ
แต่ละไฟล์ Docbook XML ที่สร้างขึ้น (ดูที่ --สร้าง-docbook ตัวเลือกสำหรับรายละเอียด) คือ a
การอ้างอิง[2] บทความอธิบายอินเทอร์เฟซ D-Bus
OPTIONS
รองรับตัวเลือกต่อไปนี้:
-h, --ช่วยด้วย
แสดงความช่วยเหลือและออก
--xml-ไฟล์ ไฟล์
ไฟล์ XML การวิปัสสนา D-Bus
--อินเทอร์เฟซ-คำนำหน้า org.project.คำนำหน้า
คำนำหน้าเพื่อตัดชื่ออินเทอร์เฟซ D-Bus ทั้งหมดเมื่อคำนวณชื่อประเภทสำหรับ
การผูก C และ Docbook เรียงลำดับ คุณลักษณะ[3]
--สร้าง-docbook เอาท์ไฟล์
สร้างเอกสาร Docbook สำหรับแต่ละอินเทอร์เฟซ D-Bus และวางไว้ใน
OUTFILES-NAME.xml โดยที่ NAME เป็นตัวยึดตำแหน่งสำหรับชื่ออินเทอร์เฟซ เช่น
net.Corp.FooBar และอื่นๆ
--สร้าง-c-code เอาท์ไฟล์
สร้างรหัส C สำหรับอินเทอร์เฟซ D-Bus ทั้งหมดและใส่ไว้ใน OUTFILES.c และ OUTFILES.h
--c-เนมสเปซ โครงการของคุณ
เนมสเปซที่จะใช้สำหรับโค้ด C ที่สร้างขึ้น คาดว่าจะอยู่ใน คาเมลเคส[4] หรือ
น่าเกลียด_เคส (ดูด้านบน).
--c-สร้าง-ตัวจัดการวัตถุ
หากผ่านตัวเลือกนี้ #GDBusObject ที่เหมาะสม #GDBusObjectProxy
สร้างคลาสย่อย #GDBusObjectSkeleton และ #GDBusObjectManagerClient
--หมายเหตุ ELEMENT KEY มูลค่า
ใช้เพื่อใส่คำอธิบายประกอบ D-Bus ลงในไฟล์ XML ที่กำหนด ใช้ได้กับ
อินเทอร์เฟซ วิธีการ สัญญาณ คุณสมบัติ และอาร์กิวเมนต์ในลักษณะต่อไปนี้:
gdbus-codegen --c-namespace MyApp \
--generate-c-code สร้างโดย myapp \
--ใส่คำอธิบายประกอบ "org.project.InterfaceName" \
org.gtk.GDBus.C.ชื่อ MyFrobnicator \
--ใส่คำอธิบายประกอบ "org.project.InterfaceName:Property" \
บาร์ค้างคาว \
--ใส่คำอธิบายประกอบ "org.project.InterfaceName.Method()" \
org.freedesktop.DBus.Deprecated จริง \
--ใส่คำอธิบายประกอบ "org.project.InterfaceName.Method()[arg_name]" \
งูฟ่อ \
--ใส่คำอธิบายประกอบ "org.project.InterfaceName::Signal" \
แมวเหมียว \
--ใส่คำอธิบายประกอบ "org.project.InterfaceName::Signal[arg_name]" \
วูฟสุนัข \
myapp-dbus-interfaces.xml
สามารถใช้สตริง UTF-8 ใดก็ได้สำหรับ KEY และ มูลค่า.
ได้รับการสนับสนุน ดี-บัส คำอธิบายประกอบ
คำอธิบายประกอบ D-Bus ต่อไปนี้ได้รับการสนับสนุนโดย gdbus-codegen:
org.freedesktop.DBus.เลิกใช้แล้ว
ใช้กับอะไรก็ได้ , , และ องค์ประกอบที่จะระบุ
ว่าองค์ประกอบนั้นถูกคัดค้านหากค่าของมันเป็นจริง โปรดทราบว่าคำอธิบายประกอบนี้คือ
กำหนดไว้ใน ดีบัส สเปค[1] และสมมติได้เฉพาะค่าจริงและเท็จเท่านั้น
โดยเฉพาะอย่างยิ่ง คุณไม่สามารถระบุเวอร์ชันที่องค์ประกอบถูกเลิกใช้ใน nor
ข้อความการเลิกใช้งานที่เป็นประโยชน์ใดๆ ควรเพิ่มข้อมูลดังกล่าวในองค์ประกอบ
เอกสารแทน
เมื่อสร้างโค้ด C คำอธิบายประกอบนี้จะใช้เพื่อเพิ่ม #G_GNUC_DEPRECATED เพื่อสร้าง
ฟังก์ชันสำหรับองค์ประกอบ
เมื่อสร้าง Docbook XML คำเตือนการเลิกใช้งานจะปรากฏขึ้นพร้อมเอกสารประกอบ
สำหรับองค์ประกอบ
org.gtk.GDBus.ตั้งแต่
ใช้กับอะไรก็ได้ , , และ องค์ประกอบที่จะระบุ
เวอร์ชัน (สตริงรูปแบบอิสระใดๆ แต่เปรียบเทียบโดยใช้ฟังก์ชันการจัดเรียงแบบทราบเวอร์ชัน)
องค์ประกอบที่ปรากฏใน
เมื่อสร้างรหัส C ฟิลด์นี้จะใช้เพื่อให้แน่ใจว่าตัวชี้ฟังก์ชันสั่งสำหรับ
การรักษา ABI/API โปรดดูหัวข้อ “การรับประกันความเสถียร”
เมื่อสร้าง Docbook XML ค่าของแท็กนี้จะปรากฏในเอกสารประกอบ
org.gtk.GDBus.DocString
สตริงที่มีเนื้อหา Docbook สำหรับเอกสาร คำอธิบายประกอบนี้สามารถใช้ได้กับ
, , , และ องค์ประกอบ
org.gtk.GDBus.DocString.Short
สตริงที่มีเนื้อหา Docbook สำหรับเอกสารประกอบสั้นๆ/สั้นๆ คำอธิบายประกอบนี้สามารถเท่านั้น
ใช้บน องค์ประกอบ
org.gtk.GDBus.C.ชื่อ
ใช้กับอะไรก็ได้ , , และ องค์ประกอบที่จะระบุ
ชื่อที่จะใช้เมื่อสร้างรหัส C มูลค่าคาดว่าจะอยู่ใน คาเมลเคส[4] หรือ
น่าเกลียด_เคส (ดูด้านบน).
org.gtk.GDBus.C.ForceGVariant
หากตั้งค่าเป็นสตริงที่ไม่ว่างเปล่า ระบบจะใช้อินสแตนซ์ #GVariant แทนค่าธรรมชาติ
ประเภทซี คำอธิบายประกอบนี้สามารถใช้ได้กับทุก และ ธาตุ.
org.gtk.GDBus.C.UnixFD
หากตั้งค่าเป็นสตริงที่ไม่ว่างเปล่า โค้ดที่สร้างขึ้นจะมีพารามิเตอร์ที่จะแลกเปลี่ยน
ตัวอธิบายไฟล์โดยใช้ประเภท #GUnixFDList คำอธิบายประกอบนี้สามารถใช้ได้กับ
องค์ประกอบ
เพื่อเป็นทางเลือกที่ง่ายกว่าในการใช้คำอธิบายประกอบ org.gtk.GDBus.DocString โปรดทราบว่า parser
ใช้โดย gdbus-codegen แยกวิเคราะห์ความคิดเห็น XML ในลักษณะที่คล้ายกับ gtk-doc[แรก]:
โปรดทราบว่า @since สามารถใช้ได้ในบิตเอกสารอินไลน์ใดๆ (เช่น สำหรับอินเทอร์เฟซ
เมธอด สัญญาณ และคุณสมบัติ) เพื่อตั้งค่า org.gtk.GDBus.Since annotation. สำหรับ
org.gtk.GDBus.DocString คำอธิบายประกอบ (และความคิดเห็นแบบอินไลน์) โปรดทราบว่าสตริงย่อยของแบบฟอร์ม
#net.Corp.Bar, net.Corp.Bar.FooMethod(), #net.Corp.Bar::Barสัญญาณ และ
#net.Corp.InlineDocs:BazProperty ทั้งหมดขยายไปยังลิงก์ไปยังอินเทอร์เฟซที่เกี่ยวข้อง
วิธีการ สัญญาณ และคุณสมบัติ นอกจากนี้ สตริงย่อยที่ขึ้นต้นด้วย @ และ % อักขระ are
แปลเป็น พารามิเตอร์[6] และ คงที่[7] ตามลำดับ
หากทั้งความคิดเห็น XML และ org.gtk.GDBus.DocString หรือ org.gtk.GDBus.DocString.Short
มีคำอธิบายประกอบอยู่หลังชนะ
ตัวอย่าง
พิจารณา XML Introspection D-Bus ต่อไปนี้
If gdbus-codegen ใช้กับไฟล์นี้ดังนี้:
gdbus-codegen --generate-c-code ที่สร้างโดย myapp \
--c-เนมสเปซ MyApp \
--อินเทอร์เฟซ-คำนำหน้า net.corp.MyApp \
net.Corp.MyApp.Frobber.xml
สองไฟล์ที่เรียกว่า myapp-generated.[ch] จะถูกสร้างขึ้น ไฟล์ให้บทคัดย่อ
#GTypeInterface -ประเภทที่ได้มาเรียกว่า MyAppFrobber เช่นเดียวกับสองประเภท instantiable ด้วย
ชื่อเดียวกันแต่ลงท้ายด้วย หนังสือมอบฉันทะ และ โครงกระดูก. ไฟล์ที่สร้างขึ้นโดยประมาณมี
สิ่งอำนวยความสะดวกดังต่อไปนี้:
/* มาโคร GType สำหรับสามประเภทที่สร้างขึ้น */
#กำหนด MY_APP_TYPE_FROBBER (my_app_frobber_get_type ())
#กำหนด MY_APP_TYPE_FROBBER_SKELETON (my_app_frobber_skeleton_get_type ())
#กำหนด MY_APP_TYPE_FROBBER_PROXY (my_app_frobber_proxy_get_type ())
typedef struct _MyAppFrobber MyAppFrobber; /* ดัมมี่ typedef */
โครงสร้าง typedef
{
GTypeInterface parent_iface;
/* ตัวจัดการสัญญาณสำหรับ ::สัญญาณแจ้งเตือน */
เป็นโมฆะ (* การแจ้งเตือน) (MyAppFrobber * พร็อกซี่
GVariant *icon_blob,
ความสูงของจินต์,
const gchar* const *ข้อความ);
/* ตัวจัดการสัญญาณสำหรับ ::handle-hello-world สัญญาณ */
gboolean (*handle_hello_world) (MyAppFrobber * พร็อกซี่
GDBusMethodInvocation * การร้องขอ
const gchar * ทักทาย);
} MyAppFrobberIface;
/* เรียก HelloWorld() แบบอะซิงโครนัส */
ถือเป็นโมฆะ
my_app_frobber_call_hello_world (พร็อกซี MyAppFrobber *
const gchar * สวัสดี
GCancellable *ยกเลิกได้
GAsyncReadyCallback โทรกลับ,
ผู้ใช้ gpointer_data);
บูลีน
my_app_frobber_call_hello_world_finish (MyAppFrobber *พร็อกซี่
gchar **ออก_ตอบสนอง
GAsyncResult *ความละเอียด
GError **ข้อผิดพลาด);
/* เรียก HelloWorld() พร้อมกัน บล็อกการโทรเธรด */
บูลีน
my_app_frobber_call_hello_world_sync (MyAppFrobber *พร็อกซี่
const gchar * สวัสดี
gchar **ออก_ตอบสนอง
GCancellable *ยกเลิกได้
GError **ข้อผิดพลาด);
/* เสร็จสิ้นการจัดการการเรียกเมธอด HelloWorld() */
ถือเป็นโมฆะ
my_app_frobber_complete_hello_world (วัตถุ MyAppFrobber *
GDBusMethodInvocation * การร้องขอ
const gchar * ตอบกลับ);
/* ส่งสัญญาณ ::notification / Notification() สัญญาณ D-Bus */
ถือเป็นโมฆะ
my_app_frobber_emit_notification (วัตถุ MyAppFrobber *
GVariant *icon_blob,
ความสูงของจินต์,
const gchar* const *ข้อความ);
/* รับคุณสมบัติ :verbose GObject / คุณสมบัติ Verbose D-Bus
* ไม่มีการบล็อก I/O
*/
gboolean my_app_frobber_get_verbose (วัตถุ MyAppFrobber *);
/* ตั้งค่าคุณสมบัติ :verbose GObject / คุณสมบัติ Verbose D-Bus
* ไม่มีการบล็อก I/O
*/
เป็นโมฆะ my_app_frobber_set_verbose (วัตถุ MyAppFrobber *
ค่า gboolean);
/* รับข้อมูลอินเทอร์เฟซ */
GDBusInterfaceInfo *my_app_frobber_interface_info (เป็นโมฆะ);
/* สร้างวัตถุโครงกระดูกใหม่ พร้อมที่จะส่งออก */
MyAppFrobber *my_app_frobber_skeleton_new (เป็นโมฆะ);
/* ตัวสร้างพร็อกซีฝั่งไคลเอ็นต์
*
* นอกจากนี้ _new_for_bus(), _new_for_bus_finish() และ
* _new_for_bus_sync() ตัวสร้างพร็อกซีจะถูกสร้างขึ้นด้วย
*/
ถือเป็นโมฆะ
my_app_frobber_proxy_new (การเชื่อมต่อ GDBusConnection *,
แฟล็ก GDBusProxyFlags
const gchar * ชื่อ
const gchar * object_path,
GCancellable *ยกเลิกได้
GAsyncReadyCallback โทรกลับ,
ผู้ใช้ gpointer_data);
MyAppFrobber *
my_app_frobber_proxy_new_finish (GAsyncResult *ความละเอียด
GError **ข้อผิดพลาด);
MyAppFrobber *
my_app_frobber_proxy_new_sync (การเชื่อมต่อ GDBusConnection *,
แฟล็ก GDBusProxyFlags
const gchar * ชื่อ
const gchar * object_path,
GCancellable *ยกเลิกได้
GError **ข้อผิดพลาด);
ดังนั้น สำหรับทุกวิธี D-Bus จะมีฟังก์ชัน C สามฟังก์ชันสำหรับการเรียกใช้เมธอด one
#GObject สัญญาณสำหรับจัดการสายเรียกเข้าและฟังก์ชัน C หนึ่งฟังก์ชันสำหรับการกรอก an
สายเรียกเข้า. สำหรับทุกสัญญาณ D-Bus จะมีสัญญาณ #GObject หนึ่งสัญญาณและฟังก์ชัน C หนึ่งฟังก์ชันสำหรับ
ปล่อยมัน สำหรับทุกคุณสมบัติของ D-Bus จะมีการสร้างฟังก์ชัน C สองฟังก์ชัน (ตัวตั้งค่าหนึ่งตัว, หนึ่งตัว
getter) และคุณสมบัติ #GObject หนึ่งรายการ ตารางต่อไปนี้สรุปสิ่งอำนวยความสะดวกที่สร้างขึ้น
และใช้บังคับได้ที่ไหน:
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────... ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────...
│ ไคลเอนต์ │ เซิร์ฟเวอร์ │
├────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────... ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────...
│ประเภท │ ใช้ MyAppFrobberProxy │ การใช้งานประเภทใดก็ได้ │
│ │ ที่ MyAppFrobber │
│ │ │ อินเทอร์เฟซ │
├────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────... ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────...
│วิธีการ │ การใช้ m_a_f_hello_world() │ รับผ่าน │
│ โทร. │ handle_hello_world() │
│ │ │ ตัวจัดการสัญญาณ เสร็จสมบูรณ์ │
│ │ │ โทรด้วย │
│ │ m_a_f_complete_hello_world() │
├────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────... ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────...
│สัญญาณ │ เชื่อมต่อกับ │ ใช้ │
│ ::การแจ้งเตือน Gวัตถุ │ m_a_f_emit_notification() ถึง │
│ │ สัญญาณ │ ปล่อยสัญญาณ │
├────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────... ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────...
│คุณสมบัติ (การอ่าน) │ การใช้ m_a_f_get_verbose() │ ใช้ #GObject's │
│ │ หรือ :รายละเอียด. เ get_property() วีฟังค์ │
├────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────... ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────...
│คุณสมบัติ (การเขียน) │ การใช้ m_a_f_set_verbose() │ ใช้ #GObject's │
│ │ หรือ :รายละเอียด. เ set_property() วีฟังค์ │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────... ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────...
ด้านลูกค้า การใช้
คุณสามารถใช้ประเภทพร็อกซีที่สร้างขึ้นกับตัวสร้างที่สร้างขึ้น:
MyAppFrobber *พร็อกซี่;
GError * ข้อผิดพลาด;
ข้อผิดพลาด = NULL;
พร็อกซี = my_app_frobber_proxy_new_for_bus_sync (
G_BUS_TYPE_SESSION
G_DBUS_PROXY_FLAGS_NONE
"net.Corp.MyApp", /* ชื่อรถบัส */
"/net/Corp/MyApp/SomeFrobber", /* วัตถุ */
null, /* GCancellable* */
&ข้อผิดพลาด);
/* ทำสิ่งต่างๆ ด้วย proxy */
g_object_unref (พร็อกซี);
แทนที่จะใช้สิ่งอำนวยความสะดวก #GDBusProxy ทั่วไป เราสามารถใช้เมธอดที่สร้างขึ้นได้
เช่น my_app_frobber_call_hello_world() เพื่อเรียก
net.Corp.MyApp.Frobber.HelloWorld() วิธี D-Bus เชื่อมต่อกับ ::การแจ้งเตือน
GObject สัญญาณเพื่อรับ net.Corp.MyApp.Frobber::การแจ้งเตือน สัญญาณ D-Bus และรับ/ตั้งค่า
net.Corp.MyApp.Frobber:รายละเอียด คุณสมบัติ D-Bus โดยใช้คุณสมบัติ GObject
:รายละเอียด หรือ my_app_get_verbose() และ my_app_set_verbose() วิธีการ ใช้มาตราฐาน
#GObject::notify สัญญาณเพื่อรับฟังการเปลี่ยนแปลงคุณสมบัติ
โปรดทราบว่าการเข้าถึงคุณสมบัติทั้งหมดนั้นผ่านแคชคุณสมบัติของ #GDBusProxy ดังนั้นจึงไม่มี I/O ที่เคยทำ
เมื่ออ่านคุณสมบัติ โปรดทราบว่าการตั้งค่าคุณสมบัติจะทำให้
org.freedesktop.DBus.Properties.Set[8] วิธีการที่จะเรียกบนวัตถุระยะไกล นี้
อย่างไรก็ตาม การโทรเป็นแบบอะซิงโครนัส ดังนั้นการตั้งค่าคุณสมบัติจะไม่บล็อก นอกจากนี้ การเปลี่ยนแปลงคือ
ล่าช้าและไม่สามารถตรวจสอบข้อผิดพลาดได้
ฝั่งเซิร์ฟเวอร์ การใช้
ที่สร้างขึ้น MyAppFrobber อินเทอร์เฟซได้รับการออกแบบมาเพื่อให้ง่ายต่อการใช้งานใน a
#GObject คลาสย่อย ตัวอย่างเช่น การจัดการ สวัสดีชาวโลก() การเรียกเมธอด ตั้งค่า vfunc
สำหรับ handle_hello_hello_world() ที่ MyAppFrobberIface โครงสร้าง. ในทำนองเดียวกันในการจัดการ
net.Corp.MyApp.Frobber:รายละเอียด คุณสมบัติแทนที่ :รายละเอียด #GObject คุณสมบัติจาก
คลาสย่อย ในการส่งสัญญาณให้ใช้เช่น my_app_emit_signal() หรือ g_signal_emit_by_name()
แทนที่จะจัดคลาสย่อย มักจะง่ายกว่าที่จะใช้ created MyAppFrobberSkeleton
คลาสย่อย เพื่อจัดการกับการเรียกเมธอดที่เข้ามา ให้ใช้ g_signal_connect() กับ ::รับมือ-*
สัญญาณและแทนที่จะแทนที่ #GObject 's get_property() และ set_property() วีฟังค์,
ใช้ g_object_get() และ g_object_set() หรือตัวรับและตัวตั้งค่าคุณสมบัติที่สร้างขึ้น (
คลาสที่สร้างมีการนำกระเป๋าคุณสมบัติภายในไปใช้)
gboolean แบบคงที่
on_handle_hello_world (อินเทอร์เฟซ MyAppFrobber *
GDBusMethodInvocation * การร้องขอ
const gchar * สวัสดี
gpointer user_data)
{
if (g_strcmp0 (ทักทาย "Boo") != 0)
{
gchar *ตอบสนอง;
ตอบกลับ = g_strdup_printf ("คำ! คุณพูดว่า `%s'", คำทักทาย);
my_app_complete_hello_world (อินเทอร์เฟซ การเรียกใช้ การตอบสนอง);
g_free (ตอบกลับ);
}
อื่น
{
g_dbus_method_invocation_return_error (คำขอ
MY_APP_ERROR
MY_APP_ERROR_NO_WHINING
"เฮ้ %s จะไม่มีเสียงหอน!",
g_dbus_method_invocation_get_sender (คำขอ));
}
ส่งคืน TRUE
}
[ ... ]
อินเทอร์เฟซ = my_app_frobber_skeleton_new ();
my_app_frobber_set_verbose (อินเทอร์เฟซ TRUE);
g_signal_connect (อินเทอร์เฟซ
"จัดการสวัสดีโลก",
G_CALLBACK (on_handle_hello_world)
some_user_data);
[ ... ]
ข้อผิดพลาด = NULL;
ถ้า (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (อินเทอร์เฟซ))
การเชื่อมต่อ
"/path/of/dbus_object",
&ข้อผิดพลาด))
{
/* จัดการข้อผิดพลาด */
}
เพื่ออำนวยความสะดวกให้กับชุดการเปลี่ยนแปลงของอะตอม (คุณสมบัติหลายอย่างเปลี่ยนแปลงไปพร้อมกัน)
#GObject::notify สัญญาณจะเข้าคิวเมื่อได้รับ คิวถูกระบายในที่ไม่ได้ใช้งาน
ตัวจัดการ (ซึ่งถูกเรียกจากลูปหลักเริ่มต้นของเธรดของเธรดโดยที่
วัตถุโครงกระดูกถูกสร้างขึ้น) และจะทำให้เกิดการปล่อยของ
org.freedesktop.DBus.Properties::PropertiesChanged[8] ส่งสัญญาณด้วยคุณสมบัติทั้งหมดที่
มีการเปลี่ยนแปลง ใช้ g_dbus_interface_skeleton_flush() หรือ g_dbus_object_skeleton_flush() เพื่อ
ล้างคิวทันที ใช้ g_object_freeze_notify() และ g_object_thaw_notify() สำหรับ
ชุดการเปลี่ยนแปลงของอะตอมหากอยู่บนเธรดอื่น
C ประเภท ทำแผนที่
ประเภทสเกลาร์ (ประเภทสตริง 'b', 'y', 'n', 'q', 'i', 'u', 'x', 't' และ 'd') ), สตริง
(ประเภทสตริง 's', 'ay', 'o' และ 'g') และอาร์เรย์ของสตริง (ประเภทสตริง 'as', 'ao' และ
'aay') ถูกแมปกับประเภทธรรมชาติ เช่น #gboolean, #gdouble, #gint, gchar*, gchar**
และอื่นๆ อย่างอื่นจะจับคู่กับประเภท #GVariant
การทำแผนที่อัตโนมัตินี้สามารถปิดได้โดยใช้คำอธิบายประกอบ
org.gtk.GDBus.C.ForceGVariant - หากใช้ #GVariant จะถูกแลกเปลี่ยนแทนเสมอ
ประเภท C ดั้งเดิมที่สอดคล้องกัน คำอธิบายประกอบนี้อาจสะดวกในการใช้เมื่อใช้
bytestrings (type-string 'ay') สำหรับข้อมูลที่สามารถฝัง NUL ไบต์ได้
ความเสถียร รับประกัน
ฟังก์ชัน C ที่สร้างขึ้นรับประกันว่าจะไม่เปลี่ยน ABI นั่นคือถ้าวิธีการ
สัญญาณหรือคุณสมบัติไม่เปลี่ยนลายเซ็นใน XML การวิปัสสนา C . ที่สร้างขึ้น
ฟังก์ชั่นจะไม่เปลี่ยน C ABI ของมันเช่นกัน ABI ของอินสแตนซ์และคลาสที่สร้างขึ้น
โครงสร้างก็จะถูกอนุรักษ์ไว้เช่นกัน
ABI ของ #GType ที่สร้างขึ้นจะถูกสงวนไว้ก็ต่อเมื่อ org.gtk.GDBus.Since
ใช้คำอธิบายประกอบอย่างรอบคอบ — นี่เป็นเพราะ VTable สำหรับ #GInterface อาศัย
ฟังก์ชั่นพอยน์เตอร์สำหรับตัวจัดการสัญญาณ โดยเฉพาะถ้าวิธี D-Bus คุณสมบัติหรือ
สัญญาณหรือถูกเพิ่มไปยังอินเทอร์เฟซ D-Bus จากนั้น ABI ของประเภท #GInterface ที่สร้างขึ้นคือ
รักษาไว้ก็ต่อเมื่อแต่ละวิธีที่เพิ่มเข้ามา สัญญาณคุณสมบัติมีคำอธิบายประกอบด้วย
org.gtk.GDBus.Since การทำหมายเหตุประกอบโดยใช้หมายเลขเวอร์ชันที่มากกว่าเวอร์ชันก่อนหน้า
ปัจจุบันรหัส C ที่สร้างขึ้นมีหมายเหตุประกอบด้วย gtk-doc[5] / Gวัตถุ
วิปัสสนา[9] ความคิดเห็น / คำอธิบายประกอบ เลย์เอาต์และเนื้อหาอาจเปลี่ยนแปลงใน
ในอนาคตจึงไม่มีการค้ำประกันเกี่ยวกับการใช้ SECTION เป็นต้น
แม้ว่าจะไม่คาดว่าจะมีการเปลี่ยนแปลง Docbook ที่สร้างขึ้นสำหรับอินเทอร์เฟซ D-Bus แต่ก็ไม่รับประกัน
มอบให้ ณ จุดนี้
เป็นสิ่งสำคัญที่จะต้องทราบว่าไม่ควรตรวจสอบรหัสที่สร้างขึ้นในการแก้ไข
ระบบควบคุม และไม่ควรรวมไว้ในไฟล์เก็บถาวรต้นทางแบบกระจาย
ใช้ gdbus-codegen ออนไลน์โดยใช้บริการ onworks.net