Доступ к необработанному указателю в System.Reflection.Pointer из python - PullRequest
0 голосов
/ 12 февраля 2019

Мой вопрос в основном является сжатой формой вопроса здесь: Доступ к System.Reflection.Pointer from python

У меня есть управляемая dll, которую я не могу изменить.Функция в управляемой dll возвращает указатель данных в виде « System.Reflection.Pointer object».Мой вопрос: как я могу получить фактический адрес памяти, на который указывает указатель?Моя мотивация, конечно, использовать этот адрес для операции memcopy.

До сих пор я пытался:

  • приведение System.Reflection.Pointer к System.IntPtr следующим образом: System.IntPtr (myPointer).Результат: TypeError: значение не может быть преобразовано в System.IntPtr
  • Распаковка System.Reflection.Pointer примерно так: myPointer.Unbox (myPointer).Результат: другой System.Reflection.Pointer
  • Использование System.Runtime.InteropServices.Marshal.Copy вместо memcopy (как предложено в ответе на Доступ к System.Reflection.Pointer from python . Результат: TypeError: Ни один метод не соответствует заданным аргументам. Кажется, что Marshal.Copy ожидает IntPtr и не знает, как обрабатывать System.Reflection.Pointer

Я знаю, что в C # можно получитьнеобработанный указатель, выполнив "p = (byte *) myPointer;"

...