我想使用具有以下签名的函数的 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 之间有什么区别,哪个是正确的使用?