我有一个名为:
bool game_init(void* window);获取一个指向窗口句柄的指针,基本上它只是初始化opengl,然后从c++进行渲染(我使用boost::python将这个函数导出到python),现在我创建了一个简单的hello word窗口来尝试它。
app = QtWidgets.QApplication(["",""])
window = QtWidgets.QMainWindow()
winid = window.winId()
ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.c_void_p
ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object, ctypes.c_char_p]
handle = ctypes.pythonapi.PyCapsule_GetPointer(winid.ascapsule() , None)有趣的是,我做的句柄只是一个类似85983252的整数,我猜它是hello world窗口的句柄,但是我如何将这个整数作为void *传递,以便我的c++代码可以使用它创建opengl窗口?目前,错误提示: python参数bool game_init(int);与cpp代码不匹配。
environment:
Linux,pyqt5 boost::python gcc,python 3.4发布于 2017-09-21 01:23:16
从window.winId()返回的winid是一个无符号整数指针(在C/C++术语中)。所以你的handle也是。
希望您已经加载了共享对象库,它具有"C“函数。
然后,只需通过使用库对象调用C函数来传递句柄。
像这样,
lib.game_init(handle)发布于 2019-01-24 02:00:26
我有windows的winID句柄,所以
class CamViewWidget(QtGui.QWidget):
...
def on_sync_message(self, bus, message):
if message.get_structure().get_name() == 'prepare-window-handle':
message.src.set_property('force-aspect-ratio', True)
message.src.set_window_handle(self.winId().__int__())发布于 2020-09-22 19:34:54
winId()返回sip.voidptr对象。要在MessageBoxA等WinAPI中使用它,需要通过int()对其进行转换。
hWnd = int(QWidget.winId())
ctypes.windll.user32.MessageBoxA(hWnd,"Hi","Hi", 0x40)https://stackoverflow.com/questions/46326933
复制相似问题