gdbus-codegen - ອອນລາຍໃນຄລາວ

ນີ້ແມ່ນຄໍາສັ່ງ gdbus-codegen ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ໂຄງການ:

NAME


gdbus-codegen - ລະຫັດ D-Bus ແລະເຄື່ອງສ້າງເອກະສານ

ສະຫຼຸບສັງລວມ


gdbus-codegen [-h, - ຊ່ວຍ] [--interface-prefix org.project.Prefix]
[--generate-c-code ເອກະສານອອກ] [--c-namespace ໂຄງການຂອງເຈົ້າ]
[--c-generate-object-manage] [--generate-docbook ເອກະສານອອກ]
[--xml-files ເອກະສານ] [--ອະທິບາຍ ELEMENT KEY ມູນຄ່າ]... FILE [FILE...]

ລາຍລະອຽດ


gdbus-codegen ຖືກນໍາໃຊ້ເພື່ອສ້າງລະຫັດແລະ / ຫຼືເອກະສານສໍາລັບຫນຶ່ງຫຼືຫຼາຍກວ່າ D-Bus
ການໂຕ້ຕອບ. ເຄື່ອງມືອ່ານ D ລົດເມ ການກວດກາ XML[1​] ໄຟລ​໌​ແລະ​ສ້າງ​ໄຟລ​໌​ຜົນ​ຜະ​ລິດ​.
ເຄື່ອງມືປະຈຸບັນສະຫນັບສະຫນູນການສ້າງລະຫັດ C (ຜ່ານ --generate-c-code) ແລະ Docbook XML (ຜ່ານ
--generate-docbook).

ການຜະລິດ C CODE


ເມື່ອສ້າງລະຫັດ C, ປະເພດ #GIinterface -derived ແມ່ນຖືກສ້າງຂຶ້ນສໍາລັບແຕ່ລະການໂຕ້ຕອບ D-Bus.
ນອກຈາກນັ້ນ, ສໍາລັບທຸກປະເພດທີ່ສ້າງຂຶ້ນ, FooBar, ສອງ​ປະ​ເພດ instantiable ສີ​ມັງ​,
FooBarProxy ແລະ FooBarSkeleton, ການ​ປະ​ຕິ​ບັດ​ການ​ໂຕ້​ຕອບ​ທີ່​ເວົ້າ​ແມ່ນ​ຍັງ​ຖືກ​ສ້າງ​ຂຶ້ນ​. ອະດີດ
ແມ່ນມາຈາກ #GDBusProxy ແລະມີຈຸດປະສົງເພື່ອໃຊ້ໃນດ້ານລູກຄ້າໃນຂະນະທີ່ອັນສຸດທ້າຍແມ່ນ
ໄດ້ມາຈາກປະເພດ #GDBusInterfaceSkeleton ເຮັດໃຫ້ມັນງ່າຍຕໍ່ການສົ່ງອອກໃນ a
#GDBusConnection ບໍ່ວ່າຈະໂດຍກົງຫຼືຜ່ານຕົວຢ່າງ #GDBusObjectManagerServer.

ຊື່ຂອງແຕ່ລະປະເພດ C ທີ່ສ້າງຂຶ້ນແມ່ນມາຈາກຊື່ການໂຕ້ຕອບ D-Bus ທີ່ລອກດ້ວຍ
ຄໍານໍາຫນ້າໃຫ້ກັບ --interface-prefix ແລະມີຈຸດທີ່ຖືກໂຍກຍ້າຍອອກແລະຕົວອັກສອນເບື້ອງຕົ້ນ
ຕົວພິມໃຫຍ່. ຕົວຢ່າງ, ສໍາລັບການໂຕ້ຕອບ D-Bus com.acme.Coyote ຊື່ທີ່ໃຊ້ແມ່ນ
ComAcmeCoyote. ສໍາລັບການໂຕ້ຕອບ D-Bus org.project.Bar.Frobnicator ກັບ --interface-prefix
org.project., ຊື່ທີ່ໃຊ້ແມ່ນ BarFrobnicator.

ສໍາລັບວິທີການ, ສັນຍານແລະຄຸນສົມບັດ, ຖ້າບໍ່ໄດ້ລະບຸ, ຊື່ເລີ່ມຕົ້ນເປັນຊື່ຂອງ
ວິທີການ, ສັນຍານຫຼືຊັບສິນ.

ສອງຮູບແບບຂອງຊື່ຖືກນໍາໃຊ້ - ແບບຟອມ CamelCase ແລະແບບຟອມຕົວພິມນ້ອຍ. CamelCase
ແບບຟອມແມ່ນໃຊ້ສໍາລັບຊື່ #GType ແລະໂຄງສ້າງ, ໃນຂະນະທີ່ແບບຟອມຕົວພິມນ້ອຍຖືກນໍາໃຊ້ໃນຫນ້າທີ່
ຊື່. ແບບຟອມຕົວພິມນ້ອຍແມ່ນຖືກຄິດໄລ່ໂດຍການປ່ຽນຈາກ CamelCase ໄປຫາຕົວພິມນ້ອຍແລະ
ການໃສ່ຂີດກ້ອງຢູ່ຂອບເຂດຄຳສັບ (ໂດຍນຳໃຊ້ heuristics ທີ່ແນ່ນອນ).

ຖ້າຄ່າທີ່ໃຫ້ໂດຍ org.gtk.GDBus.C.Name annotation ຫຼື the --c-namespace ທາງເລືອກ
ປະກອບມີຂີດກ້ອງ (ບາງຄັ້ງເອີ້ນວ່າ Ugly_Case), ຫຼັງຈາກນັ້ນຊື່ camel-case ແມ່ນມາຈາກ
ໂດຍ​ການ​ເອົາ​ອັນ​ດັບ​ລຸ່ມ​ອອກ​ທັງ​ຫມົດ​, ແລະ​ຊື່​ຕົວ​ພິມ​ນ້ອຍ​ໄດ້​ມາ​ໂດຍ​ຕົວ​ພິມ​ນ້ອຍ​ໄດ້​
ສາຍ. ນີ້ແມ່ນເປັນປະໂຫຍດໃນບາງສະຖານະການທີ່ຕົວຫຍໍ້ຖືກນໍາໃຊ້. ຕົວຢ່າງ, ຖ້າ
ຄໍາບັນຍາຍຖືກນໍາໃຊ້ໃນການໂຕ້ຕອບ net.MyCorp.MyApp.iSCSITarget ກັບຄ່າ.
iSCSI_Target ແບບຟອມ CamelCase ແມ່ນ iSCSITarget ໃນຂະນະທີ່ຮູບແບບຕົວພິມນ້ອຍແມ່ນ iscsi_target.
ຖ້າຄໍາບັນຍາຍຖືກນໍາໃຊ້ໃນວິທີການ EjectTheiPod ດ້ວຍຄ່າ Eject_The_iPod, the
ຮູບແບບຕົວພິມນ້ອຍແມ່ນ eject_the_ipod.

ການຜະລິດ DOCBOOK ເອກະສານອ້າງອີງ


ແຕ່ລະໄຟລ໌ Docbook XML ທີ່ສ້າງຂຶ້ນ (ເບິ່ງ --generate-docbook ທາງເລືອກສໍາລັບລາຍລະອຽດ) ແມ່ນ a
ການສົ່ງຂໍ້ມູນ[2] ບົດຄວາມອະທິບາຍການໂຕ້ຕອບ D-Bus.

OPTIONS


ທາງ​ເລືອກ​ດັ່ງ​ຕໍ່​ໄປ​ນີ້​ແມ່ນ​ສະ​ຫນັບ​ສະ​ຫນູນ​:

-h, - ຊ່ວຍ
ສະແດງການຊ່ວຍເຫຼືອ ແລະອອກ.

--xml-files ເອກະສານ
ໄຟລ໌ XML introspection D-Bus.

--interface-prefix org.project.Prefix.
ຄໍານໍາຫນ້າເພື່ອລອກອອກຈາກຊື່ການໂຕ້ຕອບ D-Bus ທັງຫມົດໃນເວລາທີ່ຄໍານວນປະເພດສໍາລັບ the
C binding ແລະ Docbook ປະເພດ ຄຸນລັກສະນະ[3]

--generate-docbook ເອກະສານອອກ
ສ້າງເອກະສານ Docbook ສໍາລັບແຕ່ລະສ່ວນຕິດຕໍ່ຂອງ D-Bus ແລະໃສ່ມັນໃສ່
OUTFILES-NAME.xml ບ່ອນທີ່ NAME ເປັນຜູ້ຖືສະຖານທີ່ສໍາລັບຊື່ສ່ວນຕິດຕໍ່, ຕົວຢ່າງ
net.Corp.FooBar ແລະອື່ນໆ.

--generate-c-code ເອກະສານອອກ
ສ້າງລະຫັດ C ສໍາລັບການໂຕ້ຕອບ D-Bus ທັງຫມົດແລະໃສ່ໃນ OUTFILES.c ແລະ OUTFILES.h.

--c-namespace ໂຄງການຂອງເຈົ້າ
namespace ທີ່ຈະໃຊ້ສໍາລັບການສ້າງລະຫັດ C. ນີ້ຄາດວ່າຈະຢູ່ໃນ CamelCase[4] ຫລື
Ugly_Case (ເບິ່ງ​ຢູ່​ຂ້າງ​ເທິງ).

--c-generate-object-manage
ຖ້າຕົວເລືອກນີ້ຜ່ານໄປ, ເຫມາະສົມ #GDBusObject, #GDBusObjectProxy,
ຊັ້ນຍ່ອຍ #GDBusObjectSkeleton ແລະ #GDBusObjectManagerClient ແມ່ນຖືກສ້າງຂຶ້ນ.

--ອະທິບາຍ ELEMENT KEY ມູນຄ່າ
ໃຊ້ເພື່ອໃສ່ຄໍາບັນຍາຍ D-Bus ເຂົ້າໄປໃນໄຟລ໌ XML ທີ່ໃຫ້. ມັນສາມາດໃຊ້ກັບ
ການໂຕ້ຕອບ, ວິທີການ, ສັນຍານ, ຄຸນສົມບັດແລະການໂຕ້ຖຽງໃນວິທີການດັ່ງຕໍ່ໄປນີ້:

gdbus-codegen --c-namespace MyApp
--generate-c-code myapp-generate
--annotate "org.project.InterfaceName"
org.gtk.GDBus.C.Name MyFrobnicator
--annotate "org.project.InterfaceName:Property"
ບາ bat
--annotate "org.project.InterfaceName.Method()"
org.freedesktop.DBus.Deprecated true
--annotate "org.project.InterfaceName.Method()[arg_name]"
ງູ hiss
--annotate "org.project.InterfaceName::ສັນຍານ"
cat meow
--annotate "org.project.InterfaceName::Signal[arg_name]"
ຫມາ wuff
myapp-dbus-interfaces.xml
ສະຕຣິງ UTF-8 ສາມາດໃຊ້ສໍາລັບ KEY ແລະ ມູນຄ່າ.

ສະ ໜັບ ສະ ໜູນ D-BUS ຄຳບັນຍາຍ


ຄຳອະທິບາຍປະກອບ D-Bus ຕໍ່ໄປນີ້ໄດ້ຮັບການສະໜັບສະໜູນໂດຍ gdbus-codegen:

org.freedesktop.DBus.Deprecated
ສາມາດໃຊ້ໄດ້ກັບທຸກ , , ແລະ ອົງ​ປະ​ກອບ​ທີ່​ຈະ​ລະ​ບຸ​
ວ່າອົງປະກອບຖືກປະຕິເສດຖ້າຄ່າຂອງມັນຖືກຕ້ອງ. ໃຫ້ສັງເກດວ່າຄໍາບັນຍາຍນີ້ແມ່ນ
ກຳ ນົດໃນ D ລົດເມ ຂໍ້ມູນ[1​] ແລະ​ພຽງ​ແຕ່​ສາ​ມາດ​ສົມ​ມຸດ​ວ່າ​ຄ່າ​ທີ່​ແທ້​ຈິງ​ແລະ​ບໍ່​ຖືກ​ຕ້ອງ​.
ໂດຍສະເພາະ, ທ່ານບໍ່ສາມາດລະບຸສະບັບທີ່ອົງປະກອບໄດ້ຖືກປະຕິເສດໃນຫຼື
ຂໍ້ຄວາມການປະຕິເສດທີ່ເປັນປະໂຫຍດໃດໆ. ຂໍ້ມູນດັ່ງກ່າວຄວນໄດ້ຮັບການເພີ່ມເຂົ້າໃນອົງປະກອບ
ເອກະສານແທນ.

ເມື່ອສ້າງລະຫັດ 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.Name
ສາມາດໃຊ້ໄດ້ກັບທຸກ , , ແລະ ອົງ​ປະ​ກອບ​ທີ່​ຈະ​ລະ​ບຸ​
ຊື່ທີ່ຈະໃຊ້ເມື່ອສ້າງລະຫັດ C. ມູນຄ່າຄາດວ່າຈະຢູ່ໃນ CamelCase[4] ຫລື
Ugly_Case (ເບິ່ງ​ຢູ່​ຂ້າງ​ເທິງ).

org.gtk.GDBus.C.ForceGVariant
ຖ້າຕັ້ງເປັນສະຕຣິງທີ່ບໍ່ຫວ່າງເປົ່າ, ຕົວຢ່າງ #GVariant ຈະຖືກໃຊ້ແທນຄ່າທໍາມະຊາດ
ປະເພດ C. ຄຳອະທິບາຍນີ້ສາມາດໃຊ້ກັບອັນໃດກໍໄດ້ ແລະ ອົງປະກອບ.

org.gtk.GDBus.C.UnixFD
ຖ້າຕັ້ງເປັນສະຕຣິງທີ່ບໍ່ຫວ່າງເປົ່າ, ລະຫັດທີ່ສ້າງຂຶ້ນຈະປະກອບມີພາລາມິເຕີເພື່ອແລກປ່ຽນ
ຕົວອະທິບາຍໄຟລ໌ໂດຍໃຊ້ປະເພດ #GunixFDList. ຄໍາບັນຍາຍນີ້ສາມາດຖືກນໍາໃຊ້ໃນ
ອົງປະກອບ.

ເປັນທາງເລືອກທີ່ງ່າຍກວ່າທີ່ຈະໃຊ້ຄໍາບັນຍາຍ org.gtk.GDBus.DocString, ຈົ່ງຈື່ໄວ້ວ່າ parser
ໃຊ້ໂດຍ gdbus-codegen ວິເຄາະຄໍາຄິດເຫັນ XML ໃນທາງທີ່ຄ້າຍຄືກັບ gtk-doc[ສອງ]:

ໃຫ້ສັງເກດວ່າ @since ສາມາດຖືກນໍາໃຊ້ໃນເອກະສານເອກະສານ inline ໃດ (ເຊັ່ນ: ສໍາລັບການໂຕ້ຕອບ,
ວິທີການ, ສັນຍານ ແລະຄຸນສົມບັດ) ເພື່ອຕັ້ງຄ່າ org.gtk.GDBus.Since annotation. ສໍາ​ລັບ
org.gtk.GDBus.DocString annotation (ແລະ inline comment), ໃຫ້ສັງເກດວ່າ substrings ຂອງແບບຟອມ.
#net.Corp.Bar, net.Corp.Bar.FooMethod(), #net.Corp.Bar::BarSignal ແລະ
#net.Corp.InlineDocs:BazProperty ທັງຫມົດແມ່ນຂະຫຍາຍໄປສູ່ການເຊື່ອມຕໍ່ກັບສ່ວນຕິດຕໍ່ທີ່ກ່ຽວຂ້ອງ,
ວິທີການ, ສັນຍານແລະຊັບສິນ. ນອກຈາກນັ້ນ, ແຖວຍ່ອຍທີ່ເລີ່ມຕົ້ນດ້ວຍ @ ແລະ % ຕົວອັກສອນແມ່ນ
rendered ເປັນ ພາລາມິເຕີ[6] ແລະ ຄົງທີ່[7​] ຕາມ​ລໍາ​ດັບ​.

ຖ້າທັງສອງຄຳເຫັນ XML ແລະ org.gtk.GDBus.DocString ຫຼື org.gtk.GDBus.DocString.Short
ຄໍາບັນຍາຍແມ່ນມີຢູ່, ສຸດທ້າຍຊະນະ.

EXAMPLE


ພິຈາລະນາ D-Bus Introspection XML ຕໍ່ໄປນີ້.


















If gdbus-codegen ຖືກ​ນໍາ​ໃຊ້​ໃນ​ໄຟລ​໌​ເຊັ່ນ​ນີ້​:

gdbus-codegen --generate-c-code myapp-generated
--c-namespace MyApp
--interface-prefix net.corp.MyApp.
net.Corp.MyApp.Frobber.xml

ສອງໄຟລ໌ທີ່ເອີ້ນວ່າ myapp-generated.[ch] ແມ່ນຖືກສ້າງຂຶ້ນ. ໄຟລ໌ໃຫ້ບົດຄັດຫຍໍ້
#GTypeInterface -ປະເພດທີ່ມາຈາກເອີ້ນວ່າ MyAppFrobber ເຊັ່ນດຽວກັນກັບສອງປະເພດ instantiable ກັບ
ຊື່ດຽວກັນແຕ່ຕໍ່ທ້າຍດ້ວຍ proxy ແລະ skeleton. ໄຟລ໌ທີ່ສ້າງຂຶ້ນ, ປະມານ, ມີ
ສິ່ງອໍານວຍຄວາມສະດວກດັ່ງຕໍ່ໄປນີ້:

/* GType macro ສໍາລັບສາມປະເພດທີ່ສ້າງຂຶ້ນ */
#ກຳນົດ 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; /* Dummy typedef */

typedef ໂຄງສ້າງ
{
GTypeInterface parent_iface;

/* ຕົວ​ຈັດ​ສັນ​ຍານ​ສໍາ​ລັບ​ການ :: ສັນ​ຍານ​ແຈ້ງ​ການ */
ໂມຄະ (*ການແຈ້ງເຕືອນ) (MyAppFrobber *ຕົວແທນ,
GVariant *icon_blob,
ຄວາມ​ສູງ gint​,
const gchar* const *ຂໍ້ຄວາມ);

/* ຕົວຈັດການສັນຍານສໍາລັບ ::handle-hello-world signal */
gboolean (*handle_hello_world) (MyAppFrobber *proxy,
GDBusMethodInvocation *ການຮຽກຮ້ອງ,
const gchar *ທັກທາຍ);
} MyAppFrobberIface;

/* ໂທ Asynchronously ໂທ HelloWorld() */
void
my_app_frobber_call_hello_world (MyAppFrobber *ຕົວແທນ,
const gchar *ທັກທາຍ,
GCancellable *ຍົກເລີກໄດ້,
GAsyncReadyCallback ໂທກັບ,
gpointer user_data);
gboolean
my_app_frobber_call_hello_world_finish (MyAppFrobber *ຕົວແທນ,
gchar **ການ​ຕອບ​ສະ​ຫນອງ​ອອກ​,
GAsyncResult *res,
GError **ຄວາມຜິດພາດ);

/* synchronously ໂທ HelloWorld(). ບລັອກສາຍໂທ. */
gboolean
my_app_frobber_call_hello_world_sync (MyAppFrobber *ຕົວແທນ,
const gchar *ທັກທາຍ,
gchar **ການ​ຕອບ​ສະ​ຫນອງ​ອອກ​,
GCancellable *ຍົກເລີກໄດ້,
GError **ຄວາມຜິດພາດ);

/* ສໍາ​ເລັດ​ການ​ຈັດ​ການ HelloWorld() ວິ​ທີ​ການ​ໂທ */
void
my_app_frobber_complete_hello_world (MyAppFrobber *object,
GDBusMethodInvocation *ການຮຽກຮ້ອງ,
const gchar *ຕອບສະຫນອງ);

/* ປ່ອຍສັນຍານ ::notification signal / Notification() D-Bus signal */
void
my_app_frobber_emit_notification (MyAppFrobber *object,
GVariant *icon_blob,
ຄວາມ​ສູງ gint​,
const gchar* const *ຂໍ້ຄວາມ);

/* ໄດ້ຮັບຊັບສິນ :verbose GObject / Verbose D-Bus ຊັບສິນ.
* ບໍ່​ມີ​ການ​ສະ​ກັດ I/O.
*/
gboolean my_app_frobber_get_verbose (MyAppFrobber *object);

/* ກໍານົດຄຸນສົມບັດ :verbose GObject / Verbose D-Bus ຄຸນສົມບັດ.
* ບໍ່​ມີ​ການ​ສະ​ກັດ I/O.
*/
ເປັນໂມຄະ my_app_frobber_set_verbose (MyAppFrobber *object,
ຄ່າ gboolean);

/* ໄດ້​ຮັບ​ຂໍ້​ມູນ​ການ​ໂຕ້​ຕອບ */
GDBusInterfaceInfo *my_app_frobber_interface_info (void);

/* ສ້າງວັດຖຸໂຄງກະດູກໃໝ່, ພ້ອມທີ່ຈະສົ່ງອອກ */
MyAppFrobber *my_app_frobber_skeleton_new (void);

/* ຕົວສ້າງພຣັອກຊີຝ່າຍລູກຄ້າ.
*
* ນອກຈາກນັ້ນ, _new_for_bus(), _new_for_bus_finish() ແລະ
* _new_for_bus_sync() ຕົວສ້າງພຣັອກຊີຍັງຖືກສ້າງຂຶ້ນ.
*/
void
my_app_frobber_proxy_new (GDBusConnection *ການເຊື່ອມຕໍ່,
ທຸງ GDBusProxyFlags,
const gchar *ຊື່,
const gchar *object_path,
GCancellable *ຍົກເລີກໄດ້,
GAsyncReadyCallback ໂທກັບ,
gpointer user_data);
MyAppFrobber *
my_app_frobber_proxy_new_finish (GAsyncResult *res,
GError **ຄວາມຜິດພາດ);
MyAppFrobber *
my_app_frobber_proxy_new_sync (GDBusConnection *ການເຊື່ອມຕໍ່,
ທຸງ GDBusProxyFlags,
const gchar *ຊື່,
const gchar *object_path,
GCancellable *ຍົກເລີກໄດ້,
GError **ຄວາມຜິດພາດ);

ດັ່ງນັ້ນ, ສໍາລັບທຸກໆວິທີການ D-Bus, ຈະມີສາມຫນ້າທີ່ C ສໍາລັບການໂທຫາວິທີການ, ຫນຶ່ງ
ສັນຍານ #GObject ສໍາລັບການຈັດການສາຍໂທເຂົ້າ ແລະຟັງຊັນ C ຫນຶ່ງສໍາລັບການເຮັດສໍາເລັດ
ສາຍໂທເຂົ້າ. ສໍາລັບທຸກໆສັນຍານ D-Bus, ມີຫນຶ່ງສັນຍານ #GObject ແລະຫນຶ່ງຟັງຊັນ C ສໍາລັບ
ປ່ອຍມັນ. ສໍາລັບທຸກໆຊັບສິນ D-Bus, ສອງຟັງຊັນ C ແມ່ນຖືກສ້າງຂຶ້ນ (ຫນຶ່ງ setter, ຫນຶ່ງ
getter) ແລະຫນຶ່ງ #GObject ຊັບສິນ. ຕາຕະລາງຕໍ່ໄປນີ້ສະຫຼຸບສິ່ງອໍານວຍຄວາມສະດວກທີ່ສ້າງຂຶ້ນ
ແລະບ່ອນທີ່ພວກມັນໃຊ້ໄດ້:

┌─────────────────────── ┬──────────────────────── ──────────────────────────── ┐
││ ລູກ​ຄ້າServer
├────────────────────── ┼──────────────────── ──────────────────────────── ┤
│ປະເພດ│ໃຊ້ MyAppFrobberProxy │ ການ​ປະ​ຕິ​ບັດ​ປະ​ເພດ​ໃດ​ຫນຶ່ງ │​
│ │ │ ທ MyAppFrobber
│ │ │ ການໂຕ້ຕອບ │
├────────────────────── ┼──────────────────── ──────────────────────────── ┤
│ວິທີການ│ໃຊ້ m_a_f_hello_world() │ຮັບຜ່ານ│
│ │ ໂທ. │ handle_hello_world()
│ │ │ ຕົວຈັບສັນຍານ. ສໍາເລັດ │
│ │ │ ໂທກັບ │
│ │ │ m_a_f_complete_hello_world()
├────────────────────── ┼──────────────────── ──────────────────────────── ┤
│ສັນຍານ │ ເຊື່ອມຕໍ່ກັບ │ ໃຊ້ │
││ ::ແຈ້ງການ GObject │ m_a_f_emit_notification() ເຖິງ │
│ │ ສັນຍານ. │ ປ່ອຍສັນຍານ. │
├────────────────────── ┼──────────────────── ──────────────────────────── ┤
│ຄຸນສົມບັດ (ການອ່ານ) │ ໃຊ້ m_a_f_get_verbose() │ ປະຕິບັດ #GObject's │
│ │ ຫຼື : ຄຳເວົ້າ. │ get_property() vfunc. │
├────────────────────── ┼──────────────────── ──────────────────────────── ┤
│ຄຸນສົມບັດ (ການຂຽນ) │ ໃຊ້ m_a_f_set_verbose() │ ປະຕິບັດ #GObject's │
│ │ ຫຼື : ຄຳເວົ້າ. │ set_property() vfunc. │
└────────────────────── ┴──────────────────────── ────────────────────────────── ┘

Cl່າຍລູກຄ້າ ການນໍາໃຊ້
ທ່ານ​ສາ​ມາດ​ນໍາ​ໃຊ້​ປະ​ເພດ proxy ທີ່​ຜະ​ລິດ​ກັບ constructors ທີ່​ສ້າງ​ຕັ້ງ​ຂື້ນ​:

MyAppFrobber *ຕົວແທນ;
GError *ຜິດພາດ;

error = NULL;
proxy = my_app_frobber_proxy_new_for_bus_sync (
G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_NONE,
"net.Corp.MyApp", /* ຊື່ລົດເມ */
"/net/Corp/MyApp/SomeFrobber", /* object */
NULL, /* GCancellable* */
ຜິດພາດ);
/* ເຮັດສິ່ງຕ່າງໆດ້ວຍຕົວແທນ */
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:Verbose D-Bus Property ໂດຍໃຊ້ຄຸນສົມບັດ GObject
: ຄຳເວົ້າ ຫຼື my_app_get_verbose() ແລະ my_app_set_verbose() ວິທີການ. ໃຊ້ມາດຕະຖານ
#GObject::ແຈ້ງສັນຍານເພື່ອຟັງການປ່ຽນແປງຊັບສິນ.

ໃຫ້ສັງເກດວ່າການເຂົ້າເຖິງຊັບສິນທັງຫມົດແມ່ນຜ່ານ cache ຊັບສິນຂອງ #GDBusProxy ດັ່ງນັ້ນບໍ່ມີ I/O ເຄີຍເຮັດ
ເມື່ອອ່ານຄຸນສົມບັດ. ໃຫ້ສັງເກດວ່າການກໍານົດຊັບສິນຈະເຮັດໃຫ້ເກີດການ
org.freedesktop.DBus.Properties.Set[8​] ວິ​ທີ​ການ​ທີ່​ຈະ​ໄດ້​ຮັບ​ການ​ເອີ້ນ​ໃນ​ວັດ​ຖຸ​ຫ່າງ​ໄກ​ສອກ​ຫຼີກ​. ນີ້
ຢ່າງໃດກໍຕາມ, ການໂທແມ່ນ asynchronous ດັ່ງນັ້ນການຕັ້ງຄ່າຄຸນສົມບັດຈະບໍ່ຂັດຂວາງ. ນອກຈາກນັ້ນ, ການປ່ຽນແປງແມ່ນ
ຊັກຊ້າແລະບໍ່ມີການກວດສອບຄວາມຜິດພາດທີ່ເປັນໄປໄດ້.

ດ້ານເຊີບເວີ ການນໍາໃຊ້
ສ້າງຂຶ້ນ MyAppFrobber ການໂຕ້ຕອບໄດ້ຖືກອອກແບບເພື່ອໃຫ້ມັນງ່າຍທີ່ຈະປະຕິບັດມັນຢູ່ໃນ a
#ຊັ້ນຍ່ອຍ GObject. ຕົວຢ່າງ, ເພື່ອຈັດການ ສະ​ບາຍ​ດີ​ຊາວ​ໂລກ() ວິທີການ invocations, ກໍານົດ vfunc
ສໍາລັບການ handle_hello_hello_world() ໃນ MyAppFrobberIface ໂຄງສ້າງ. ຄ້າຍຄືກັນ, ເພື່ອຈັດການ
net.Corp.MyApp.Frobber:Verbose ຊັບສິນ override ໄດ້ : ຄຳເວົ້າ #Gobject ຊັບສິນຈາກ
ຊັ້ນຍ່ອຍ. ເພື່ອປ່ອຍສັນຍານ, ໃຊ້ຕົວຢ່າງ my_app_emit_signal() ຫຼື g_signal_emit_by_name().

ແທນທີ່ຈະຈັດປະເພດຍ່ອຍ, ມັນມັກຈະງ່າຍຕໍ່ການໃຊ້ສິ່ງທີ່ສ້າງຂຶ້ນ MyAppFrobberSkeleton
ຊັ້ນຍ່ອຍ. ເພື່ອຈັດການສາຍໂທເຂົ້າ, ໃຫ້ໃຊ້ g_signal_connect() ກັບ :: handle-*
ສັນຍານແລະແທນທີ່ຈະ overriding #GObject 's get_property() ແລະ set_property() vfuncs,
ໃຊ້ g_object_get() ແລະ g_object_set() ຫຼືຄຸນສົມບັດທີ່ສ້າງຂຶ້ນ getters ແລະ setters (the
ຊັ້ນຮຽນທີ່ສ້າງຂຶ້ນມີການປະຕິບັດຖົງຊັບສິນພາຍໃນ).

gboolean ຄົງທີ່
on_handle_hello_world (MyAppFrobber *ການໂຕ້ຕອບ,
GDBusMethodInvocation *ການຮຽກຮ້ອງ,
const gchar *ທັກທາຍ,
gpointer user_data)
{
ຖ້າ (g_strcmp0 (ທັກທາຍ, "Boo") != 0)
{
gchar *ຕອບສະຫນອງ;
response = g_strdup_printf("Word! ເຈົ້າເວົ້າວ່າ `%s'.", ທັກທາຍ);
my_app_complete_hello_world (ການໂຕ້ຕອບ, ການຮຽກຮ້ອງ, ການຕອບສະໜອງ);
g_free (ຕອບສະຫນອງ);
}
ອື່ນ
{
g_dbus_method_invocation_return_error (ການ​ຮຽກ​ຮ້ອງ​,
MY_APP_ERROR,
MY_APP_ERROR_NO_WHINING,
"Hey, %s, ຈະບໍ່ສຽງດັງ!",
g_dbus_method_invocation_get_sender (invocation));
}
ກັບຄືນຈິງ;
}

[ ... ]

interface = my_app_frobber_skeleton_new ();
my_app_frobber_set_verbose (ການໂຕ້ຕອບ, TRUE);

g_signal_connect (ການໂຕ້ຕອບ,
"ຈັດການ-ສະບາຍດີ-ໂລກ",
G_CALLBACK (on_handle_hello_world),
some_user_data);

[ ... ]

error = NULL;
ຖ້າ (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (ການໂຕ້ຕອບ),
ການເຊື່ອມຕໍ່,
"/path/of/dbus_object",
&ຜິດພາດ))
{
/* ການ​ຈັດ​ການ​ຄວາມ​ຜິດ​ພາດ */
}

​ເພື່ອ​ອຳນວຍ​ຄວາມ​ສະດວກ​ໃຫ້​ບັນດາ​ການ​ປ່ຽນ​ແປງ​ຂອງ​ປະລໍາມະນູ (ຫຼາຍ​ຄຸນສົມບັດ​ທີ່​ປ່ຽນ​ໄປ​ໃນ​ເວລາ​ດຽວ​ກັນ),
#GObject::ສັນຍານແຈ້ງເຕືອນຖືກຈັດຄິວຂຶ້ນເມື່ອໄດ້ຮັບ. ແຖວຖືກລະບາຍໃນບ່ອນຫວ່າງ
handler (ເຊິ່ງເອີ້ນວ່າຈາກ thread-default loop main ຂອງ thread ບ່ອນທີ່
ວັດຖຸ skeleton ໄດ້ກໍ່ສ້າງ) ແລະຈະເຮັດໃຫ້ເກີດການປ່ອຍອາຍພິດຂອງ
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 TYPE MAPPING


ປະເພດ Scalar (type-strings 'b', 'y', 'n', 'q', 'i', 'u', 'x', 't' ແລະ 'd') ), strings
(type-strings 's', 'ay', 'o' ແລະ 'g') ແລະ array ຂອງ string (type-strings 'as', 'ao' ແລະ
'aay') ຖືກສ້າງແຜນທີ່ເປັນປະເພດທໍາມະຊາດ, ເຊັ່ນ: #gboolean, #gdouble, #gint, gchar*, gchar**
ແລະອື່ນໆ. ທຸກສິ່ງທຸກຢ່າງອື່ນແມ່ນເຮັດແຜນທີ່ເປັນປະເພດ #GVariant.

ແຜນທີ່ອັດຕະໂນມັດນີ້ສາມາດຖືກປິດໄດ້ໂດຍການໃຊ້ຄໍາບັນຍາຍ
org.gtk.GDBus.C.ForceGVariant - ຖ້າໃຊ້ແລ້ວ #GVariant ຈະຖືກແລກປ່ຽນສະເໝີແທນ.
ປະເພດ C native ທີ່ສອດຄ້ອງກັນ. ຄໍາບັນຍາຍນີ້ອາດຈະສະດວກໃນການນໍາໃຊ້ໃນເວລາທີ່ການນໍາໃຊ້
bytestrings (type-string 'ay') ສໍາລັບຂໍ້ມູນທີ່ສາມາດຝັງ NUL bytes.

STABILITY ຮັບປະກັນ


ຟັງຊັນ C ທີ່ສ້າງຂຶ້ນແມ່ນຮັບປະກັນວ່າຈະບໍ່ປ່ຽນແປງ ABI ຂອງພວກເຂົາ, ນັ້ນແມ່ນ, ຖ້າວິທີການ,
ສັນ​ຍານ​ຫຼື​ຊັບ​ສິນ​ບໍ່​ໄດ້​ມີ​ການ​ປ່ຽນ​ແປງ​ລາຍ​ເຊັນ​ຂອງ​ຕົນ​ໃນ introspection XML​, C ທີ່​ຜະ​ລິດ​ໄດ້​
ຟັງຊັນຈະບໍ່ປ່ຽນແປງ C ABI ຂອງມັນຄືກັນ. ABI ຂອງຕົວຢ່າງ ແລະຊັ້ນຮຽນທີ່ສ້າງຂຶ້ນ
ໂຄງສ້າງຈະຖືກຮັກສາໄວ້ເຊັ່ນດຽວກັນ.

ABI ຂອງ #GType s ທີ່ສ້າງຂຶ້ນຈະຖືກຮັກສາໄວ້ພຽງແຕ່ຖ້າ org.gtk.GDBus.Since
ຄໍາບັນຍາຍຖືກນໍາໃຊ້ຢ່າງສົມເຫດສົມຜົນ - ນີ້ແມ່ນຍ້ອນວ່າ VTable ສໍາລັບ # GIinterface ອີງໃສ່
ຕົວຊີ້ຟັງຊັນສໍາລັບຕົວຈັດການສັນຍານ. ໂດຍສະເພາະ, ຖ້າວິທີການ D-Bus, ຊັບສິນຫຼື
ສັນຍານຫຼືຖືກເພີ່ມເຂົ້າໃນການໂຕ້ຕອບ D-Bus, ຫຼັງຈາກນັ້ນ ABI ຂອງປະເພດ #GIinterface ທີ່ສ້າງຂຶ້ນແມ່ນ
ເກັບຮັກສາໄວ້ຖ້າຫາກວ່າ, ແລະພຽງແຕ່ຖ້າຫາກວ່າ, ແຕ່ລະວິທີການເພີ່ມ, ສັນຍານຊັບສິນແມ່ນ annotated ກັບເຂົາເຈົ້າ
org.gtk.GDBus.ນັບຕັ້ງແ​​ຕ່ annotation ໂດຍໃຊ້ຕົວເລກສະບັບທີ່ໃຫຍ່ກວ່າສະບັບທີ່ຜ່ານມາ.

ລະຫັດ C ທີ່ຖືກສ້າງຂື້ນໃນປັດຈຸບັນຈະມີການບັນຍາຍດ້ວຍ gtk-doc[5] / GObject
ການກວດກາ[9] ຄໍາຄິດເຫັນ / ຄໍາບັນຍາຍ. ຮູບແບບແລະເນື້ອໃນອາດຈະມີການປ່ຽນແປງໃນ
ໃນອະນາຄົດ, ດັ່ງນັ້ນບໍ່ມີການຮັບປະກັນກ່ຽວກັບການນໍາໃຊ້ SECTION ແລະອື່ນໆ.

ໃນຂະນະທີ່ Docbook ທີ່ສ້າງຂຶ້ນສໍາລັບການໂຕ້ຕອບ D-Bus ຄາດວ່າຈະບໍ່ປ່ຽນແປງ, ບໍ່ມີການຮັບປະກັນ
ແມ່ນໃຫ້ຢູ່ໃນຈຸດນີ້.

ມັນເປັນສິ່ງສໍາຄັນທີ່ຈະສັງເກດວ່າລະຫັດທີ່ສ້າງຂຶ້ນບໍ່ຄວນຖືກກວດສອບໃນການແກ້ໄຂ
ລະບົບການຄວບຄຸມ, ຫຼືມັນຄວນຈະຖືກລວມເຂົ້າໃນການເກັບມ້ຽນແຫຼ່ງແຈກຢາຍ.

ໃຊ້ gdbus-codegen ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net



ລ່າສຸດ Linux ແລະ Windows ໂຄງການອອນໄລນ໌