homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: [ctypes] Add value attribute to non basic pointers.
Type: enhancement Stage:
Components: ctypes Versions: Python 3.10, Python 3.9, Python 3.8
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: amaury.forgeotdarc, belopolsky, eryksun, martin.panter, meador.inge, memeplex
Priority: normal Keywords:

Created on 2016年03月15日 02:02 by memeplex, last changed 2022年04月11日 14:58 by admin.

Messages (5)
msg261794 - (view) Author: Memeplex (memeplex) Date: 2016年03月15日 02:02
I know one can do addressof(p.contents), but it's a bit inconsistent that c_void_p and c_char_p contain the same information in the value attribute.
msg262398 - (view) Author: Eryk Sun (eryksun) * (Python triager) Date: 2016年03月25日 03:10
The `value` of a c_char_p or c_wchar_p pointer is a Python bytes or str object. Since `value` won't consistently be the address value, it may be better to introduce a read-only `as_void` attribute that can be implemented consistently for all pointer types (including function pointers). Its value would be the same as the `value` of a casted c_void_p (e.g. NULL is mapped to None). The new attribute would be added as a getset descriptor in Pointer_getsets and PyCFuncPtr_getsets. For simple pointer types, it would have to be added specially in PyCSimpleType_new.
msg267953 - (view) Author: Memeplex (memeplex) Date: 2016年06月09日 03:23
Related: http://bugs.python.org/issue27274.
Maybe ptr.toaddress? As opposed to addressof(ptr). I think ptr.address might be confusing as it's intutive meaning is closer to addressof(ptr).
msg268079 - (view) Author: Martin Panter (martin.panter) * (Python committer) Date: 2016年06月10日 03:56
Eryk Sun’s as_void suggestion sounds similar to doing:
ctypes.cast(any_pointer, ctypes.c_void_p)
Why do you want the address? Perhaps it is good enough to get it from a void pointer:
ctypes.cast(any_pointer, ctypes.c_void_p).value
Maybe "pointer_value" would be less confusing than "toaddress".
msg268262 - (view) Author: Memeplex (memeplex) Date: 2016年06月11日 20:10
Martin, there were two reasons:
1. Conciseness: addressof(p.contents) vs. p.value.
2. Uniformity: I expect the value of a pointer to be the address it points to.
Then Eryk pointed out that p.value has already another meaning for simple pointer types, so (2) can't be fully achieved and for (1) it will be necessary to pick another attribute name. But we could still get something shorter and uniform inside the subset of pointer types.
p.as_void makes me expect a c_void_p instance. In that case the address will be p.as_void.value (or p.as_void().value?), which is a bit indirect. I think p.toaddress conveys the exact meaning[1] and consistently follows the naming style of addressof, besides being slightly shorter.
[1] Well, toaddress might mean "get the pointed-to address" or "convert from pointer to address", but in any case the meaning is right.
History
Date User Action Args
2022年04月11日 14:58:28adminsetgithub: 70752
2021年02月26日 17:33:21eryksunsetversions: + Python 3.8, Python 3.9, Python 3.10, - Python 2.7, Python 3.6
2016年06月11日 20:10:02memeplexsetmessages: + msg268262
2016年06月10日 03:56:35martin.pantersetnosy: + martin.panter
messages: + msg268079
2016年06月09日 03:23:50memeplexsetmessages: + msg267953
2016年03月25日 03:10:30eryksunsetnosy: + eryksun

messages: + msg262398
versions: + Python 2.7
2016年03月15日 17:10:13SilentGhostsetnosy: + amaury.forgeotdarc, belopolsky, meador.inge

versions: + Python 3.6
2016年03月15日 02:02:09memeplexcreate

AltStyle によって変換されたページ (->オリジナル) /