将| ClutterActor *转换为ClutterStage *
||
我正在探索为D创建杂波绑定的可能性
语言(http://d-programming-language.org/)并以
使用libclutter的动态加载尝试一些简单的测试。我跑了
可能源自GObject继承的问题
系统,感谢您对解决该问题的任何帮助。这是
调试:使用clutter_stage_get_default返回一个ClutterActor *
我可以使用clutter_actor_ *方法。但是我总是会出错或
我使用clutter_stage_ *或clutter_container_ *时发生段故障
方法。这是我的测试代码:http://pastebin.com/nVrQ69dU
在第56行的clutter_container_add_actor调用中,出现以下错误:
(<unknown>:11976): Clutter-CRITICAL **: clutter_container_add_actor:
assertion \'CLUTTER_IS_CONTAINER (container)\' failed
在示例代码中,我注意到了CLUTTER_STAGE和
用于铸造的CLUTTER_CONTAINER宏(这些显然不是
就我所知),但据我所知,他们只是表现出色
进行一些检查,然后进行普通C转换。如果这是不正确的,有些
需要先在舞台指针上完成Gobject类型的魔术
演员,请让我知道。绑定并使用
clutter_stage_set_title或clutter_stage_set_color和cast(ClutterStage*)stage
导致
分割错误,大概是同样的问题。
编辑:这是一个没有外部依赖关系的精简示例(如果您不在Linux上,则需要用OS的等效项替换dl调用)。根据GDB和Valgrind的说法,此代码会因段错误而失败,该错误在ѭ2中
没有找到相关结果
已邀请:
2 个回复
镶骄册筷
。因此,dmd认为您正在调用D函数,并使用了错误的调用约定。正确执行此操作的一种方法是这样的:
我不确定如何在没有别名的情况下使它工作。 DMD拒绝在模板参数中使用
解析任何内容:
顺便说一句:您的
函数很危险:它返回一个char *表示可以修改字符串,但这并不总是正确的:如果将字符串文字传递给
,它可能不会分配新的内存,而是返回原始字符串的指针代替。字符串文字位于只读存储器中,因此可能导致问题。 您可以只调整函数类型以匹配C类型(C中为--9ѭ--D中为)10ѭ)并直接使用toStringz。
坛沤疲撑拆
(与C强制转换不同),我在这里对此予以驳斥 您最好使用句柄包装结构添加另一个抽象层,并在投射时从这些宏中模拟检查 但是如果你这样做
(先投射到void *,然后投射到ClutterContainer *)