Types 将gpointer强制转换为GType的正确方法

Types 将gpointer强制转换为GType的正确方法,types,macros,glib,gnome,Types,Macros,Glib,Gnome,我正在尝试创建一个宏,它将把gpointer转换为GType,反之亦然。我已经创建了以下宏来执行此操作,并使用相关的作为指南: #ifdef GTYPE_TO_POINTER #define GTYPE_TO_POINTER (x) (GSIZE_TO_POINTER (x)) #endif #ifdef GPOINTER_TO_GTYPE #define GPOINTER_TO_GTYPE(p) (GPOINTER_TO_SIZE (p)) #endif 我已按如下方式进行了铸造:

我正在尝试创建一个宏,它将把
gpointer
转换为
GType
,反之亦然。我已经创建了以下宏来执行此操作,并使用相关的作为指南:

#ifdef GTYPE_TO_POINTER
  #define GTYPE_TO_POINTER (x) (GSIZE_TO_POINTER (x))
#endif
#ifdef GPOINTER_TO_GTYPE
  #define GPOINTER_TO_GTYPE(p) (GPOINTER_TO_SIZE (p))
#endif
我已按如下方式进行了铸造:

type = (GType)g_hash_table_lookup(typeTable, GUINT_TO_POINTER(tflag));
type = GPOINTER_TO_GTYPE(g_hash_table_lookup(typeTable, GUINT_TO_POINTER(tflag)));

 // stuff

 g_hash_table_insert(typeTable,
                     GUINT_TO_POINTER(tflag),
                     GTYPE_TO_POINTER(type)); 
我想做如下的演员:

type = (GType)g_hash_table_lookup(typeTable, GUINT_TO_POINTER(tflag));
type = GPOINTER_TO_GTYPE(g_hash_table_lookup(typeTable, GUINT_TO_POINTER(tflag)));

 // stuff

 g_hash_table_insert(typeTable,
                     GUINT_TO_POINTER(tflag),
                     GTYPE_TO_POINTER(type)); 
然而,这似乎是有问题的,因为我的编译器指示已使用
g_hash_table_lookup
cast和以下
g_hash_table_insert

warning: implicit declaration of function 'GPOINTER_TO_GTYPE'          
warning: implicit declaration of function 'GTYPE_TO_POINTER'
warning: passing argument 3 of 'g_hash_table_insert' makes pointer from integer without a cast [-Wint-conversion]
另外,当我尝试运行包装器时,我得到一个
java:symbol查找错误
,该错误是
未定义的symbol:GPOINTER\u to_GTYPE


有谁能建议我可以做些什么来解决这个问题吗?

好的,我现在似乎已经自己解决了

首先,我在检查
GTYPE_TO_指针
GPOINTER_TO_GTYPE
时使用了错误的测试,因为它们是我想要定义的变量,编译器找不到它们,而且从未做出定义

其次,我使用未定义的变量作为参数,因此这些宏的正确定义似乎是:

#ifdef GPOINTER_TO_SIZE
  #define GPOINTER_TO_GTYPE(gpointer) (GPOINTER_TO_SIZE (gpointer))
#endif
#ifdef GSIZE_TO_POINTER
  #define GTYPE_TO_POINTER(gtype) (GSIZE_TO_POINTER(gtype))
#endif
这意味着我的casting函数现在可以顺利编译了