2011-03-07 34 views
4

我有这样一个缓冲:得到一个ctypes的地址对象

bufstr = ctypes.create_string_buffer("Test", 32) 

我如何获得缓冲区的地址?即,一个显示,如果我做:

print bufstr 

像:

<ctypes.c_char_Array_32 object at 0x042ACAD0> 

我知道可以用按地址()中,例如通过它;但是如果我只想得到那个地址(除了切分那个字符串!)呢?

谢谢!

+0

只是出于好奇..你为什么要的地址? – Apalala 2011-03-07 03:13:41

+1

@Apalala:必须将它传递给需要访问该缓冲区的嵌入式DLL。 – 2011-03-07 16:26:29

回答

5

使用ctypes。 addressof

ctypes.addressof(bufstr) 
+0

谢谢! (对不起,以前没有注意到你回复) – 2011-03-10 02:04:50

+0

现在还有一件事。这适用于使用ctypes.create_string_buffer创建的缓冲区字符串。但是,如果我必须通过一个简单的长时间呢? addressof()不能与ctypes.c_long一起工作(给出一个TypeError)。 – 2011-03-10 02:08:15

+0

只是在解释器中自己试了一下,可以肯定的是,它对'ctypes.c_long'很好用。 – 2011-03-10 03:51:59

3

我相信:

ctypes.addressof(bufstr) 

应该这样做。请注意,toString中提到的地址是用于Python对象的,而不是C内存。

+0

完美。谢谢爱德华! – 2011-03-07 14:47:07

+1

感谢您指出'bufstr .__ str __()'中给出的地址与'addressof(buf_str)'不是同一个值,这让我感到困惑。 – 101 2015-06-30 06:50:42