lua无法识别cairo\u text\u extens\t

lua无法识别cairo\u text\u extens\t,lua,cairo,conky,Lua,Cairo,Conky,我正在用lua编写一些小部件,供conky用来显示一些东西。 我达到了一个点,我想中心文本。在接下来的教程中,我将C代码移植到lua代码中,因此它现在看起来如下所示: local extents local utf8 = "cairo" local x, y cairo_select_font_face(cr, "Ubuntu", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL) cairo_set_font_size(cr, 13) cair

我正在用lua编写一些小部件,供conky用来显示一些东西。 我达到了一个点,我想中心文本。在接下来的教程中,我将
C
代码移植到
lua
代码中,因此它现在看起来如下所示:

local extents
local utf8 = "cairo"
local x, y
cairo_select_font_face(cr, "Ubuntu", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL)
cairo_set_font_size(cr, 13)
cairo_text_extents(cr, utf8, extents)
x = 128.0 - (extents.width / 2 + extents.x_bearing)
y = 128.0 - (extents.height / 2 + extents.y_bearing)

cairo_move_to(cr, x, y)
cairo_show_text(cr, utf8)
我现在要处理的问题是
C
数据类型
cairo\u text\u extends\t
应该传递给
cairo\u text\u extends
lua
无法识别,事实上
conky
在没有任何输出的情况下关闭


有没有办法让lua识别出那个数据类型?

我终于找到了答案。在conky中,有一个函数满足我的需要,具体如下:

cairo\u text\u extends\u t:create()函数
调用此函数以返回新的
cairo\u text\u extensts\t
结构。A. cairoapi不提供此结构的创建函数。 调用此函数后,应在返回时使用
tolua.takeownership()
值以确保正确传递所有权

因此,只需执行以下操作即可:

local extents = cairo_text_extents_t:create()
tolua.takeownership(extents)
local utf8 = "cairo"
local x, y
cairo_select_font_face(cr, "Ubuntu", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL)
cairo_set_font_size(cr, 52)
cairo_text_extents(cr, utf8, extents)
x = 128.0 - (extents.width / 2 + extents.x_bearing)
y = 128.0 - (extents.height / 2 + extents.y_bearing)

cairo_move_to (cr, x, y)
cairo_show_text (cr, utf8)

我想您需要执行
local extends={}
extends=cairo\u text\u extends(cr,utf8)
。我不这么认为,因为函数
cairo\u text\u extends
不返回任何内容,事实上在
C
中,您需要传递它
&extends
,其中
&extends
是类型为
cairo\u text\u extends\u t
的变量的内存地址。