以下是驻留在DLL中的C函数的原型:
extern "C" void__stdcall__declspec(dllexport) ReturnPulse(double*,double*,double*,double*,double*);
Run Code Online (Sandbox Code Playgroud)
在另一个线程中,我询问了如何正确创建并向此函数发送必要的参数.
这是一个主题: 如何用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() …Run Code Online (Sandbox Code Playgroud) 尝试在 Windows 上的 Emacs 中启动连接到 MSYS2 的劣质 shell(Mx shell)。
我从Mastering Emacs - Running Shells in Emacs Mastering Emacs 中找到了这段代码,并对其进行了修改:
(setq explicit-shell-file-name "D:/msys64/usr/bin/bash.exe")
(setq shell-file-name "bash")
(setq explicit-bash.exe-args '("--login" "-i")) <- Have also tried -c, and without "--login"
(setenv "SHELL" shell-file-name)
(add-hook 'comint-output-filter-functions 'comint-strip-ctrl-m)
Run Code Online (Sandbox Code Playgroud)
我得到以下信息:
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
]0;~
me@computer MSYS ~
$
Run Code Online (Sandbox Code Playgroud)
所以我有一些额外的愚蠢字符和一个不适当的命令传递到 MSYS shell,但这是进步!Windows 上的 MSYS2 + Emacs 会很棒。
我在DLL中有一个函数,我必须用python代码包装.该函数期望指向双精度数组的指针.这是我得到的错误:
Traceback (most recent call last):
File "C:\....\.FROGmoduleTEST.py", line 243, in <module>
FROGPCGPMonitorDLL.ReturnPulse(ptrpulse, ptrtdl, ptrtdP,ptrfdl,ptrfdP)
ArgumentError: argument 1: <type 'exceptions.TypeError'>: expected LP_c_double instance instead of c_double_Array_0_Array_2
Run Code Online (Sandbox Code Playgroud)
我尝试像这样投射它:
ptrpulse = cast(ptrpulse, ctypes.LP_c_double)
Run Code Online (Sandbox Code Playgroud)
但我得到:
NameError: name 'LP_c_double' is not defined
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助或方向.谢谢大家!
我有一个大型模拟测试平台,它正在运行两个Kintex Ultrascale FPGA之间的接口.我遇到了最奇怪的问题:我无法触发rising_edge(CLK)语句.
设计中有多个这样的实例:我将追溯逻辑路径,最后发现一个没有触发的rising_edge(无论如何).
下面是踢球者:用CLK'EVENT替换rising_edge并且CLK ='1'会导致逻辑正确触发,但是我无法通过一千个源文件来替换它们然后将它推送到团队回购 - 那个' d是荒谬的(加上代码是有效的,并且已被多次使用,因此进行类似的更改将浪费大量时间).
rising_edge也相当于CLK'LAST ='0'和CLK'EVENT以及CLK ='1' - 此语句也不会触发.所以一定不能满足CLK'LAST ='0',对吧?(如果CLK'EVENT和CLK ='1'触发,并且CLK'LAST ='0'的添加不会触发,那么它必须是导致问题的最后一个项目).
但是,我看看delta-view,我看不到介于0和1之间的中间值 - 没有中间的高Z状态,没有未定义的信号,没有.它看起来很完美.
我用几个不同的Modelsim版本测试了这个结果,结果相同(只是为了确保它不是一个工具回归).
世界上有什么可能导致这种情况?
我唯一可以想到的是非标准的是我使用外部名称来驱动层次结构中的几层时钟/数据,但是他们正在将预期值更新到波形窗口.
使用外部名称强制值会以某种方式导致边缘被遗漏,即使信号看起来正确(甚至下降到增量?)或是否会导致某种波形窗口差异?是什么导致CLK'LAST有效丢失?
谢谢大家!
有没有办法从事件中提取画布对象的 id?
例如,我想将一个项目添加到画布,并绑定到它——但如果我的画布上有多个项目,我需要区分它们。
def add_canvas_item(self,x,y):
canvas_item_id = self.canvas.create_oval(x-50,y-50,x+50,y+50, fill='green')
self.canvas.tag_bind(canvas_item_id ,"<ButtonPress-1>",self.stateClicked)
def itemClicked(self,event):
print("Item XYZ Clicked!") <- Where XYZ is the ID of the item
Run Code Online (Sandbox Code Playgroud)
我有一些非常“hacky”的方法来解决这个问题(跟踪鼠标,并询问画布距离该点最近的项目)但这似乎不是“最佳”方法。
有没有更好的办法?
ctypes ×2
python ×2
emacs ×1
msys2 ×1
python-3.x ×1
shell ×1
tk-toolkit ×1
tkinter ×1
types ×1
vhdl ×1
windows ×1
windowserror ×1