// ============================================================ // vqt6/_bridge.h — C 桥接层头文件 // // 作用: 把 Qt6 C++ API 包装成 extern "C" 函数,供 Viper FFI 调用 // 编译: 作为静态库 libvqt6_bridge.a 或动态库 vqt6_bridge.dll // ============================================================ #ifndef VQT6_BRIDGE_H #define VQT6_BRIDGE_H #include #include #if defined(_WIN32) # if defined(VQT6_BRIDGE_STATIC) # define VQT6_API # elif defined(VQT6_BRIDGE_BUILD) # define VQT6_API __declspec(dllexport) # else # define VQT6_API __declspec(dllimport) # endif #else # if defined(__GNUC__) && (__GNUC__ >= 4) # define VQT6_API __attribute__((visibility("default"))) # else # define VQT6_API # endif #endif #ifdef __cplusplus extern "C" { #endif // ============================================================ // QString // ============================================================ VQT6_API void* vqt6_qstring_create(const char* utf8); VQT6_API size_t vqt6_qstring_to_utf8(void* qstr, char* buf, size_t buf_size); VQT6_API void vqt6_qstring_free(void* qstr); VQT6_API int vqt6_qstring_length(void* qstr); VQT6_API int vqt6_qstring_is_empty(void* qstr); VQT6_API int vqt6_qstring_equals(void* qstr, void* other); VQT6_API void* vqt6_qstring_append(void* qstr, void* other); // ============================================================ // QByteArray // ============================================================ VQT6_API void* vqt6_qbytearray_create(const void* data, size_t size); VQT6_API void* vqt6_qbytearray_data(void* qba, size_t* out_size); VQT6_API size_t vqt6_qbytearray_size(void* qba); VQT6_API void vqt6_qbytearray_free(void* qba); // ============================================================ // QObject // ============================================================ VQT6_API void vqt6_qobject_delete(void* obj); VQT6_API void vqt6_qobject_delete_later(void* obj); VQT6_API void vqt6_qobject_set_object_name(void* obj, void* name); VQT6_API void* vqt6_qobject_object_name(void* obj); VQT6_API void vqt6_qobject_set_parent(void* child, void* parent); VQT6_API void* vqt6_qobject_parent(void* obj); VQT6_API int vqt6_qobject_connect(void* sender, const char* signal_name, void* receiver, const char* slot_name); VQT6_API int vqt6_qobject_disconnect(void* sender, const char* signal_name, void* receiver, const char* slot_name); VQT6_API void vqt6_qobject_install_event_filter(void* watched, void* filter); VQT6_API void vqt6_qobject_remove_event_filter(void* watched, void* filter); // ============================================================ // QCoreApplication // ============================================================ VQT6_API void* vqt6_qcoreapp_create(const char* app_name); VQT6_API void* vqt6_qcoreapp_instance(void); VQT6_API int vqt6_qcoreapp_exec(void* app); VQT6_API void vqt6_qcoreapp_quit(void* app, int exit_code); VQT6_API void vqt6_qcoreapp_exit(void* app, int exit_code); VQT6_API void vqt6_qcoreapp_process_events(void* app, int flags); VQT6_API void vqt6_qcoreapp_post_event(void* receiver, void* event); VQT6_API int vqt6_qcoreapp_send_event(void* receiver, void* event); VQT6_API void* vqt6_qcoreapp_organization_name(void* app); VQT6_API void vqt6_qcoreapp_set_organization_name(void* app, void* name); VQT6_API void* vqt6_qcoreapp_application_name(void* app); VQT6_API void vqt6_qcoreapp_set_application_name(void* app, void* name); // ============================================================ // QTimer // ============================================================ VQT6_API void* vqt6_qtimer_create(void); VQT6_API void* vqt6_qtimer_create_with_parent(void* parent); VQT6_API void vqt6_qtimer_start(void* timer, int interval_ms); VQT6_API void vqt6_qtimer_stop(void* timer); VQT6_API void vqt6_qtimer_set_interval(void* timer, int interval_ms); VQT6_API int vqt6_qtimer_interval(void* timer); VQT6_API int vqt6_qtimer_is_active(void* timer); VQT6_API void vqt6_qtimer_set_single_shot(void* timer, int single_shot); VQT6_API int vqt6_qtimer_is_single_shot(void* timer); // ============================================================ // QVariant // ============================================================ VQT6_API void* vqt6_qvariant_create_int(int value); VQT6_API void* vqt6_qvariant_create_double(double value); VQT6_API void* vqt6_qvariant_create_bool(int value); VQT6_API void* vqt6_qvariant_create_string(void* s); VQT6_API int vqt6_qvariant_to_int(void* v, int* ok); VQT6_API double vqt6_qvariant_to_double(void* v, int* ok); VQT6_API int vqt6_qvariant_to_bool(void* v, int* ok); VQT6_API void* vqt6_qvariant_to_string(void* v); VQT6_API int vqt6_qvariant_type_id(void* v); VQT6_API int vqt6_qvariant_is_valid(void* v); VQT6_API void vqt6_qvariant_free(void* v); // ============================================================ // QEvent // ============================================================ VQT6_API int vqt6_qevent_type(void* event); VQT6_API void vqt6_qevent_accept(void* event); VQT6_API void vqt6_qevent_ignore(void* event); VQT6_API int vqt6_qevent_is_accepted(void* event); // ============================================================ // QStringList // ============================================================ VQT6_API void* vqt6_qstringlist_create(void); VQT6_API void vqt6_qstringlist_append(void* list, void* str); VQT6_API int vqt6_qstringlist_size(void* list); VQT6_API void* vqt6_qstringlist_at(void* list, int index); VQT6_API void vqt6_qstringlist_free(void* list); // ============================================================ // QByteArrayList // ============================================================ VQT6_API void* vqt6_qbytearraylist_create(void); VQT6_API void vqt6_qbytearraylist_append(void* list, void* qba); VQT6_API int vqt6_qbytearraylist_size(void* list); VQT6_API void* vqt6_qbytearraylist_at(void* list, int index); VQT6_API void vqt6_qbytearraylist_free(void* list); // ============================================================ // 全局回调注册表 // ============================================================ typedef void (*vqt6_slot_callback_t)(int slot_id, void* user_data); VQT6_API void vqt6_register_slot(int slot_id, void* user_data); VQT6_API void vqt6_unregister_slot(int slot_id); VQT6_API void vqt6_trigger_slot(int slot_id); #ifdef __cplusplus } #endif #endif // VQT6_BRIDGE_H