因此,我最近尝试为我的一个Raspberry项目尝试GeoClue,但我仍然坚持使用gclue-simple()。运行gclue_simple_new似乎很好,但是当我试图用gclue_simple_new_finish()获取指针时,程序会给出一个运行时错误:
(process:37607): GLib-GIO-CRITICAL **: 16:26:33.873: g_async_result_get_source_object: assertion 'G_IS_ASYNC_RESULT (res)' failed
(process:37607): GLib-GIO-CRITICAL **: 16:26:33.873: g_async_initable_init_finish: assertion 'G_IS_ASYNC_INITABLE (initable)' failed
(process:37607): GLib-GObject-CRITICAL **: 16:26:33.873: g_object_unref: assertion 'G_IS_OBJECT (object)' failed该程序的代码如下:
#include <cstdlib>
#include <iostream>
#include <gclue-simple.h>
void geoclue_callback (GObject* srcObj, GAsyncResult* result, void* userData);
int main(){
std::cout << "Program started." << std::endl;
const char* DESKTOP_ID = "desktop1";
GClueAccuracyLevel accuracy = GCLUE_ACCURACY_LEVEL_CITY;
GCancellable* cancellablePtr = NULL;
GAsyncReadyCallback callback = geoclue_callback;
//gpointer is like void pointer.
gpointer usrDataPtr;
std::cout << "Variables declared." << std::endl;
gclue_simple_new(
DESKTOP_ID,
accuracy,
cancellablePtr,
callback,
usrDataPtr
);
std::cout << "geoclue service started." << std::endl;
GClueSimple* gclueServicePtr;
GAsyncResult* rstPtr;
GError** errsPtr;
//This part here causes runtime error.
gclueServicePtr = gclue_simple_new_finish(rstPtr, errsPtr);
}
void geoclue_callback (GObject* srcObj, GAsyncResult* result, void* userData) {
//Callback function for when Geoclue comes up with something
std::cout << "Results Ready." << std::endl;
}我只是进入地理线索,我以前没有任何与gtk或GNOME项目相关的经验,所以我可能遗漏了一些显而易见的东西。
谢谢!
发布于 2020-08-14 23:05:40
callback不是告诉您某些结果已经准备好,而是告诉您已经创建了GClueSimple*对象。您需要从gclue_simple_new_finish()内部调用callback,而不是在此之前。您需要将GAsyncResult *result传递给它,再加上指向GError *error = NULL初始化错误的指针。
如果初始化失败,gclue_simple_new_finish()可能返回NULL (以及您给它的错误指针中的GError对象)。
https://stackoverflow.com/questions/63419695
复制相似问题