这是驻留在 DLL 中的 C 函数的原型:
extern "C" void__stdcall__declspec(dllexport) ReturnPulse(double*,double*,double*,double*,double*);
在另一个线程中,我询问了如何正确地创建和发送必要的参数给这个函数。
这是线程: 如何使用 ctypes 包装这个具有多个参数的 C 函数?
所以我在上面的线程中使用了很好的信息,但是现在我收到了这个错误:WindowsError: exception: access violation writing 0x00001001
我不确定如何进行。我使用的是 Windows XP - 如果我登录到管理员帐户,会解决问题吗?或者这是 Python 的内存对象不可变的问题?
谢谢大家!
用相关的 Python 编辑:
FROGPCGPMonitorDLL = windll.LoadLibrary('C:\Program Files\MesaPhotonics\VideoFROG 7.0\PCGPMonitor.dll')
#Function argument:double* pulse
sizePULSE = 2 ##Manual is super unclear here
pulse = c_double * sizePULSE
ptrpulse = pulse()
#Function argument:double* tdl
sizeTRACE = FROGPCGPMonitorDLL.GetSize()
if sizeTRACE == 0 :
sizeTRACE = 1 #Manually set size to 1 for testing purposes
print "Size of FROG trace is zero. Probably not right."
tdl = c_double*sizeTRACE
ptrtdl = tdl()
#Function argument:double* tdP
sizeTRACE = FROGPCGPMonitorDLL.GetSize()
if sizeTRACE==0:
sizeTRACE=1
print "Size of FROG trace is zero. Probably not right."
tdP = c_double*sizeTRACE
ptrtdP = tdP()
#Function Argument:double* fdl
sizeTRACE = FROGPCGPMonitorDLL.GetSize()
if sizeTRACE==0:
sizeTRACE=1
print "Size of FROG trace is zero. Probably not right."
fdl = c_double*sizeTRACE
ptrfdl = fdl()
#Function Argument: double* fdP
sizeTRACE = FROGPCGPMonitorDLL.GetSize()
if sizeTRACE==0:
sizeTRACE=1
print "Size of FROG trace is zero. Probably not right."
fdP = c_double*sizeTRACE
ptrfdP = fdP()
FROGPCGPMonitorDLL.ReturnPulse(ptrpulse, ptrtdl, ptrtdP,ptrfdl,ptrfdP)
编辑添加一些相关代码!我只是在编写一个简单的脚本来让设备的每个功能首先工作。我知道,变量 sizeTRACE 可以重复使用,但它现在只是测试代码并且设备没有连接,所以 GetSize() 返回零。乘以零会扼杀我的嗡嗡声,所以我现在将其强制为 1。如果不清楚,我很抱歉,并会尝试编辑这篇文章。
第二次编辑:建议插入设备,看看是否有帮助。我刚刚插入了 FROG,但我仍然遇到同样的错误。很奇怪,我也很无知。无论如何,再次感谢大家!