如果在C++中加载两个DLL并为它们提供相同的指针,则它们都可以对指针指向的对象进行操作,而不会出现问题。你知道吗
使用Python和Cype进行相同操作时,创建对象的DLL在后续调用中绝对是对指针的取消引用,,因此指针在Python和C++ DLL之间的传递工作正常。然而,当这个指针以同样的方式提供给第二个dll时,我得到了一个非常不具信息性的异常:“WindowsError:exception:access invalization reading 0x0101CC84”。你知道吗
在我开始调试这些DLL(这将是痛苦的)之前,有人知道Python是否将这些C++ DLL加载到相同的内存空间中?你知道吗
是的,python.exe是进程,所有DLL都加载到其内存空间中。你知道吗
您的
.argtypes
和restype
声明可能不正确(或者根本不正确)。下面是一个有效的例子:x.c.
y.c.
Python
注意:我显式声明了参数
c_void_p
,因为ctypes
将在输出时将c_char_p
转换为Python字符串,在输入时将从Python字符串转换为char*
,这样就无法证明同一指针可以从一个DLL传递到另一个DLL。你知道吗类似SysInternals Process Explorer的工具可用于查看进程空间中的DLL:
注意,
x.func1()
返回的地址在x.dll
的映射范围内,y.func2(s)
正确地显示了它。你知道吗相关问题 更多 >
编程相关推荐