环境:visa4.0库,delphi7。
问题:初始化,单步调用viwrite操作设备都正常。运用定时器或循环调用viwrite时,会丢失程序form的handle而导致报错。
代码如下:
buff_size:= 1024;
procedure TForm1.Button2Click(Sender: TObject);
var
istr: string;
retcount: integer;
vistate: integer;
begin
retcount := 0;
istr := ‘*IDN?’;
vistate := viwrite(vi, istr, length(istr), retcount);
if 0 <> vistate then begin
showmessage('viwrite wrong!');
exit;
end;
buffer := '';
setlength(buffer, buff_size);
vistate := viread(vi, buffer, buff_size, retcount);
if 0 <> vistate then begin
showmessage('viread wrong!');
exit;
end;
memo3.Lines.Add(buffer);
end;
场景复现:
1在编译器不勾选optimization时,界面点击button2按钮,以上函数正常执行。
2在编译器选项中勾选optimization,则button2click函数调用viwrite失败,并报错。
3编译器不勾选optimization时,创建定时器timer函数或button3click函数调用button2.click()函数后,同样报错,与步骤2报错相同。
同样程序流程,运用libview8.2写没有任何问题。是否visa32.dll与delphi7编译器存在不兼容情况?请问NI工程师怎么回事?
截图见下: