我使用Python的ctypes的图书馆跟一个Windows动态链接库。 当我从空转我的代码,IPython中,或键入到交互式的Python解释器,它工作正常。 当我运行从Windows命令提示符下相同的代码,它崩溃。 为什么一条路死机了,一个办法成功吗?
以下是我正在运行的代码的简化版本:
import ctypes, os, sys
print "Current directory:", os.getcwd()
print "sys.path:"
for i in sys.path:
print i
PCO_api = ctypes.oledll.LoadLibrary("SC2_Cam")
camera_handle = ctypes.c_ulong()
print "Opening camera..."
PCO_api.PCO_OpenCamera(ctypes.byref(camera_handle), 0)
print " Camera handle:", camera_handle.value
wSensor = ctypes.c_uint16(0)
print "Setting sensor format..."
PCO_api.PCO_SetSensorFormat(camera_handle, wSensor)
PCO_api.PCO_GetSensorFormat(camera_handle, ctypes.byref(wSensor))
mode_names = {0: "standard", 1:"extended"}
print " Sensor format is", mode_names[wSensor.value]
当我运行从空闲或IPython的这段代码中,我得到以下结果:
Current directory: C:\Users\Admin\Desktop\code
sys.path:
C:\Users\Admin\Desktop\code
C:\Python27\Lib\idlelib
C:\Windows\system32\python27.zip
C:\Python27\DLLs
C:\Python27\lib
C:\Python27\lib\plat-win
C:\Python27\lib\lib-tk
C:\Python27
C:\Python27\lib\site-packages
Opening camera...
Camera handle: 39354336
Setting sensor format...
Sensor format is standard
>>>
当我运行从Windows命令提示符下这个代码,我得到如下结果:
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\Admin>cd Desktop\code
C:\Users\Admin\Desktop\code>C:\Python27\python.exe test.py
Current directory: C:\Users\Admin\Desktop\code
sys.path:
C:\Users\Admin\Desktop\code
C:\Windows\system32\python27.zip
C:\Python27\DLLs
C:\Python27\lib
C:\Python27\lib\plat-win
C:\Python27\lib\lib-tk
C:\Python27
C:\Python27\lib\site-packages
Opening camera...
Camera handle: 43742176
Setting sensor format...
Traceback (most recent call last):
File "test.py", line 18, in <module>
PCO_api.PCO_GetSensorFormat(camera_handle, ctypes.byref(wSensor))
File "_ctypes/callproc.c", line 936, in GetResult
WindowsError: [Error -1609945086] Windows Error 0xA00A3002
C:\Users\Admin\Desktop\code>
注意几个DLL来电工作,这是直到我到达设定传感器格式,我们去出轨。
通过检查,随着我打电话的DLL附带的文档,我看到了Windows错误解码为“缓冲区的WSIZE是小的。” (原文如此)。 我不知道这是相关的。 就在如此重要的情况下, 这里的API文档 。
当我看到“在空闲的作品,失败的提示”,我认为必须有一些环境变量设置不同。 我应该怎么检查?
编辑:
我加入sys.path中和os.getcwd()来测试代码。
编辑:
不知道这事,但我DLL加载(SC2_Cam.dll)是当前工作目录。 在这个目录中的另一个DLL(sc2_cl_me4.dll),我相信由SC2_Cam.dll加载。 如果我从这个目录中删除sc2_cl_me4.dll,没有电话来SC2_Cam.dll工作,包括PCO_OpenCamera。
编辑:
如果我将它输入“香草”交互式Python解释器上面还代码工作。 我不需要空闲或IPython的,使其工作。 只有调用“python.exe test.py”失败。