c与python内存传递_如何将C中的内存地址转换为python ctypes调用?

对不起,如果标题不准确,我不能100%确定它描述的情况正确:

我正尝试使用Python的ctypes模块与FreeTDS C库连接。我有一些代码运行得非常好,但遇到了一个问题。我不知道如何将下面的dbbind()调用的最后一个参数转换成ctypes。

我所遵循的C示例是:

/* these variable types are defined in the FreeTDS library */

DBINT customer_id;

DBCHAR company_name[255];

DBFLT8 avg_income;

/* */

/* Now bind the returned columns to the variables */

/* BYTE is defined in the FreeTDS library */

dbbind(dbconn, 1, INTBIND, 0, (BYTE *)&customer_id);

dbbind(dbconn, 2, NTBSTRINGBIND, 0, (BYTE *)&company_name);

dbbind(dbconn, 3, FLT8BIND, 0, (BYTE*)&avg_income);所以,A)如何在Python中将我的变量定义为库中的变量类型,以及B)如何将“(BYTE *)& company_name”等翻译成ctypes调用?

谢谢!

解决方法:感谢祖金,我能够解决以下问题:

import ctypes as ct

#

cid = ct.c_int()

cname = ct.create_string_buffer(256)

cavgincome = ct.c_float()

dtlib.dbbind(cdbconn, 1, INTBIND, 0, ct.byref(cid))

dtlib.dbbind(cdbconn, 2, NTBSTRINGBIND, 0, cname)

dtlib.dbbind(cdbconn, 3, REALBIND, 0, ct.byref(cavgincome))

while dtlib.dbnextrow(cdbconn) != NO_MORE_ROWS:

print '%s | %s | %s' % (cid, cname.value, cavgincome)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值