【发布时间】:2013-03-11 08:21:52
【问题描述】:
我想使用具有以下签名的函数的 DLL 文件 -
bool isValid = isImageValid((unsigned char *) buff, const __uint32& buffLen,
int imageW, int imageH, __uint32 requiredSize);
现在,buff 必须来自一个字符串,我得到的 python 包装器等效于
pyBuff = open(someimagefile, 'rb').read()
由于 pyBuff 很大(大部分),我不想分配一个新的 c uchar 数组并复制,而是要利用原始缓冲区。基本上,抓取 pyBuff 对象的 char 缓冲区并将其引用为 ctypes (c_ubyte *)。
我最接近它的是:
buff = cast(pyBuff, POINTER(c_ubyte))
但我不确定这是我想要的类型。无论如何,该函数给了我以下错误
WindowsError: exception: access violation writing 0x00000000
很高兴得到任何帮助..
另外 - 两个简短的问题:
-
下面的定义是否正确,因为在这个 DLL 的现有 C 包装器中(我正在使用它作为参考)调用(也)这个的函数具有签名:
(const char * buff, const __uint32& buffLen)byref(c_ulong(len(pyBuff)) - CDLL 和 WinDLL 有什么区别,哪一种适合?
【问题讨论】:
-
这是 Python 2 还是 3?
-
2.5.必须使用这个版本