В IronPython 2.7.9 мне нужно установить c_char_p
на абсолютный адрес 0xCAFEBABE
. Этот «адрес» будет , а не действительным адресом памяти для чтения, но он действует как волшебное слово, чтобы вызвать что-то (вы можете прочитать историю, почему я должен использовать символ * без содержания в моем вопросе в ' Как мне вручную установить указатель c_char_p ctypes IronPython на абсолютный адрес? ', где исходный вопрос не был достаточно хорош для моей проблемы). Кроме того, мне разрешено использовать только 32-битную версию интерпретатора IronPython, поскольку мне нужно загрузить 32-битную DLL.
from ctypes import *
class MyStruct(Structure):
_fields_ = [("config", c_char_p),
("magicnumber", c_char_p)]
mystruct = MyStruct()
mystruct.config = "my RS232 configuration"
mystruct.magicnumber = cast(0xCAFEBABE, c_char_p)
К сожалению, последнее назначение поднимает OverflowError
.
Другие реализации Python (CPyhton 2.x, CPython 3.x, PyPy & ActivePython, ...) могут выполнять эту работу без каких-либо проблем.
Назначение атрибута magicnumber
должно состоять в том, что интерпретатор Python должен записать 32-битный адрес 0xCAFEBABE
в правильный адрес памяти указателя внутри структуры (что могут делать многие другие дистрибутивы Python, кроме IronPython) .
Тесная связь IronPython с платформой .NET делает IronPython интересным для многих разработчиков, которые хотят использовать его в сочетании с другими языками .NET.
Может быть, эта задача невозможна с IronPython?
Я был бы рад получить хотя бы надежный ответ.
Заранее спасибо!