如here、sip.voidptr.__int__() 方法所述
以整数形式返回地址
而c_void_p documentation 说
构造函数接受一个可选的整数初始化器。
所以你应该能够构建一个c_void_p,将sip.voidptr.__int__() 方法的返回值传递给它的构造函数:
imgPtr = c_void_p(img.__int__())
我以这种方式测试了这个解决方案:
from PyQt5 import QtGui
from ctypes import *
lib = CDLL("/usr/lib/libtestlib.so")
image = QtGui.QImage("so.png")
bits = image.constBits()
bytes = image.bytesPerLine()
lib.f(c_void_p(bits.__int__()), c_int(image.width()), c_int(image.height()), c_int(bytes))
这适用于以下功能:
#include <cstdio>
#include <QImage>
extern "C" {
void f(unsigned char * c, int width, int height, int bpl)
{
printf("W:%d H:%d BPL:%d\n", width, height, bpl);
QImage image(c, width, height, bpl, QImage::Format_RGB32);
image.save("test.bmp");
}
}