从 girepository-1.0 升级到 girepository-2.0
从 girepository-1.0 升级到 girepository-2.0
libgirepository 原本是 gobject-introspection 的一部分,在那里它被原形化了许多年。
现在它被认为已经稳定(长时间以来),它已被移动到 glib 中,以便简化这两个模块的构建过程。
作为这次迁移的一部分,API 版本已从 1.0 升级到 2.0,并且进行了一些相当直接的 API 变更。请注意,GIR 版本之前是 2.0,现在是 3.0 —— 因此新的 libgirepository 版本使用 girepository-2.0.pc
和 GIRepository-3.0.typelib
。
libgirepository 两个版本之间的主要变化是,它现在使用 GTypeInstance
作为其类型系统的基础,而不是简单的 C 结构体别名。这意味着 GIBaseInfo
实例现在使用 gi_base_info_ref()
和 gi_base_info_unref()
进行引用计数。
这也意味着现在可以提供运行时转换宏,如 GI_CALLABLE_INFO()
。使用这些替代简单的 C 转换可以提高你的代码的运行时类型安全性。
一些 GIBaseInfo
子类型的堆分配仍然可能,但一旦完成,它们现在必须使用 gi_base_info_clear()
来清除。之前这并不是必须的。
作为移转代码的一部分,符号前缀已从 g_
更改为 gi_
—— 这影响了库中的每个 API,但微不足道。
各种函数参数的类型已更改 —— 例如,大多数偏移量从 guint32
更改为 size_t
。如果启用了整数类型警告,这将需要在你的代码中进行一些小的调整。
版本 1.0 到 2.0 的 API 替换
girepository-1.0 | girepository-2.0 |
---|---|
GI_CHECK_VERSION |
GLIB_CHECK_VERSION() |
g_arg_info_get_closure |
gi_arg_info_get_closure_index() |
g_arg_info_get_destroy |
gi_arg_info_get_destroy_index() |
g_arg_info_get_type |
gi_arg_info_get_type_info() |
g_arg_info_load_type |
gi_arg_info_load_type_info() |
- | gi_base_info_ref() 和 gi_base_info_unref() |
g_base_info_get_type |
使用类型检查宏如 GI_IS_OBJECT_INFO() ,或者使用 GType 和 G_TYPE_FROM_INSTANCE() 进行原始类型检查 |
g_info_new |
已删除,请使用 gi_repository_find_by_name() 和相关 API |
g_callable_info_invoke 参数 |
is_method 和 throws 在 gi_callable_info_invoke() 中已删除 |
g_constant_info_get_type |
gi_constant_info_get_type_info() |
g_field_info_get_type |
gi_field_info_get_type_info() |
g_object_info_find_method_using_interfaces 和 g_object_info_find_vfunc_using_interfaces |
输出参数 implementor 已重命名为 declarer ,并且现在是 GIBaseInfo 类型 |
g_object_info_get_type_init |
gi_object_info_get_type_init_function_name() |
g_object_info_get_ref_function |
gi_object_info_get_ref_function_name() |
g_object_info_get_unref_function |
gi_object_info_get_unref_function_name() |
g_object_info_get_set_value_function |
gi_object_info_get_set_value_function_name() |
g_object_info_get_get_value_function |
gi_object_info_get_get_value_function_name() |
g_property_info_get_type |
gi_property_info_get_type_info() |
g_registered_type_info_get_type_init |
gi_registered_type_info_get_type_init_function_name() |
g_irepository_* |
gi_repository_* |
g_irepository_get_default |
已删除单例对象;创建单独的 GIRepository 实例 |
g_irepository_get_search_path 和 g_irepository_get_library_path |
现在返回数组而不是链表 |
g_irepository_enumerate_versions |
现在返回数组而不是链表 |
g_irepository_get_immediate_dependencies ,g_irepository_get_dependencies 和 g_irepository_get_loaded_namespaces |
现在另外返回一个长度参数 |
g_irepository_get_shared_library |
gi_repository_get_shared_libraries() |
g_irepository_dump |
接受结构化 input_filename 和 output_filename 参数,而不是单个格式化的字符串 |
g_function_invoker_destroy |
gi_function_invoker_clear() |
g_struct_info_get_copy_function |
gi_struct_info_get_copy_function_name() |
g_struct_info_get_free_function |
gi_struct_info_get_free_function_name() |
g_type_info_get_array_length 和 g_type_info_get_array_fixed_size |
将成功和失败返回值拆分到新的输出参数和返回值中 |
g_type_info_get_array_length |
gi_type_info_get_array_length_index() |
g_typelib_new_from_* |
所有替换为 gi_typelib_new_from_bytes() |
g_typelib_free |
GITypelib 现在是一个带引用计数的封装类型,所以使用 gi_typelib_unref() |
GI_FUNCTION_THROWS 和 GI_VFUNC_THROWS |
gi_callable_info_can_throw_gerror() |
g_union_info_get_discriminator_offset |
将成功和失败返回值拆分到新的输出参数和返回值中 |
g_union_info_get_copy_function |
gi_union_info_get_copy_function_name() |
g_union_info_get_free_function |
gi_union_info_get_free_function_name() |
GIInfoType |
直接使用 GType |
GI_INFO_TYPE_BOXED |
由于 gi_registered_type_info_is_boxed() 的存在而被废弃 |
从版本 1.0 到 2.0 的实用程序重命名
girepository-1.0 | girepository-2.0 |
---|---|
g-ir-compiler |
gi-compile-repository |
g-ir-generate |
gi-decompile-typelib |
g-ir-inspect |
gi-inspect-typelib |
此外,一些命令行选项已经更改。
g-ir-inspect 的 --version
选项已在 gi-inspect-typelib 中重命名为 --typelib-version
gi-decompile-typelib 的 --includedir
选项将给定的目录按照最重要的优先级排序,与此类似的是 gi-compile-repository --includedir 和 gcc -I。g-ir-generate 将 --includedir
选项视为最不重要的优先级排序。
在 gi-compile-repository 中已移除未实现的 g-ir-compiler --module
选项。
在 gi-decompile-typelib 中已移除未实现的 g-ir-generate --shlib
选项。
gi-inspect-typelib 只接受一个命名空间参数。g-ir-inspect 接受多个命名空间,但只会检查第一个,其他将被忽略。