ctypes:安全地从python函数返回对象而不更改指针地址

时间:2018-03-26 18:53:15

标签: python ctypes

我有一个ctypes结构和python函数:

import ctypes

class G(ctypes.Structure):
    _fields_ = [("data",ctypes.POINTER(ctypes.c_ubyte)),
        ("length", ctypes.c_int)]

        def __init__(self,length):
            self.data = ctypes.cast(ctypes.create_string_buffer(length),ctypes.POINTER(ctypes.c_ubyte))
            self.length = length

def func(filename):
    g=G(500)
    buffer=(ctypes.c_ubyte*(g.length))()
    with open(filename, 'rb') as f:
        f.readinto(buffer)
    g.data=ctypes.cast(buffer, ctypes.POINTER(ctypes.c_ubyte))
    return g

h=func('filename.txt')

func和g返回的对象h的地址不同。

为什么以及返回对象及其原始(正确?)地址的安全方法是什么?

我应该只传递指针或其地址吗?

或者是后续解除引用创建指向同一对象的第二个指针?

或者我应该使用全球?或完全抛弃func

谢谢!

0 个答案:

没有答案