在wxPython中加载DLL

时间:2014-01-22 00:43:37

标签: python dll wxpython ctypes

我目前正在wxPython应用程序中加载cdecl dll。

我收到的错误是:

  

WindowsError:exception:访问冲突写入0x ...

运行此代码的最后一行时出现错误:

dll = ctypes.cdll.LoadLibrary("somedll.dll")
some_ctype = ctype_struct()
dll.some_func(ctypes.byref(some_ctype))

关于这一点的奇怪之处在于代码在未在wxPython应用程序中运行时会愉快地运行,或者如果我在dll函数调用之前添加print []。我缩小了print语句的要求,以便让这个东西能够打印一些列表或元组...

如果我直接在一个文件中运行它,然后在我的应用程序周围的许多地方导入它,我只能使这个调用工作。

熟悉wxPython的人是否可以理解为什么会出现这个错误?

我正在使用2.8.12.1 wxPython

运行Python 2.7.3

由于

修改 显然它已经工作了大约四分之一的时间......其他三个季度给了我访问冲突错误。

1 个答案:

答案 0 :(得分:0)

我发现问题是通过调用ctypes.CDLL("somedll.dll")而不是ctypes.cdll.LoadLibrary("somedll.dll")来解决的。我仍然不是100%肯定为什么多次调用这些函数中的任何一个导致不同的效果,但我假设LoadLibrary只尝试再次加载库,如果它不能,它会产生不必要的副作用。另一方面,CDLL将检查DLL是否已经加载到内存中并且如果可以的话使用该引用,否则它将加载库。