下面是我的代码:首先是一个函数过程,在这里创建回调函数DAQmxCreateTask('',@taskPHandle);
DAQmxCreateDIChan(taskPHandle,'Dev1/port0/line0:1','',DAQmx_Val_ChanPerLine);
  DAQmxCfgChangeDetectionTiming(taskPHandle,'Dev1/port0/line0:1','Dev1/port0/line0:1',DAQmx_Val_AcquisitionType_ContSamps ,1)
DAQmxRegisterSignalEvent(taskpHandle,DAQmx_Val_Signal2_ChangeDetectionEvent,0,Integer(@ChangeDetectionCallback),nil);
DAQmxStartTask(taskPHandle);下面是回调函数过程  function  ChangeDetectionCallback(TaskPHandle:Integer;singleID:Integer;Callback:Pointer):Integer ;stdcall;
var
   SampleStepID:DWORD;
begin
  frm_Main.mmo_alarmInfo.Lines.Add(DateTimeToStr(Now ));
  if (Mark_SampleStroke =0) then
  begin
    TaskRunning :=True ;
    hSampleStepThread:=CreateThread(nil,0,@sampleStep,nil,0,SampleStepID);  end;
  if (Mark_SampleStroke =2) then
  begin
    MaxStroke :=Num_Pluse;
    frm_Main.mmo_alarmInfo.Lines.Add(FloatToStr(MaxStroke))    ;
    frm_Main.pnl_Sumlen.Caption:=Format('%.3f',[(Num_Pluse*4/1000)+strtofloatdef(ParamIniFile.ReadString(TestModelStr,'¾àÀëÐÞÕýÖµ','0.0'),0.0)]);
    frm_Main.TestResult[4]:=frm_Main.pnl_Sumlen.Caption;
    if (StrToFloat(frm_Main.pnl_Sumlen.Caption)>=RoundTo(strtofloat(ParamIniFile.ReadString(TestModelStr,'´¥Í·×ÜÐгÌÏÂÏÞ','0.0')),-2)) and
       (StrToFloat(frm_Main.pnl_Sumlen.Caption)<=RoundTo(strtofloat(ParamIniFile.ReadString(TestModelStr,'´¥Í·×ÜÐгÌÉÏÏÞ','0.0')),-2)) then
    begin
      frm_Main.TestResult[5]:='Pass';
      frm_Main.pnl_Sumlen.Font.Color:=clBlue;
    end
    else
    begin
      frm_Main.TestResult[5]:='Fail';
      frm_Main.pnl_Sumlen.Font.Color:=clRed;
    end;
  end;
  if (Mark_SampleStroke =0) then Mark_SampleStroke :=2;
end;在程序的最后,释放taskphandle这个句柄,如下: if taskPHandle <>0 then
  begin
    DAQmxStopTask(taskPHandle);
    DAQmxClearTask(taskPHandle) ;
    taskPHandle :=0;
  end;现在不知道哪里发生错误了,只能调用一次,今天晚上搞不定,明天完蛋了

解决方案 »

  1.   

    下面是函数的原型声明:  function DAQmxCfgChangeDetectionTiming; external 'nicaiu.dll' name 'DAQmxCfgChangeDetectionTiming_VB6';  function DAQmxCfgChangeDetectionTiming(taskHandle:Longint; risingEdgeChan:PChar; fallingEdgeChan:PChar; sampleMode:DAQmxAcquisitionType; sampsPerChan:Longint):Longint; stdcall; function DAQmxRegisterSignalEvent; external 'nicaiu.dll' name 'DAQmxRegisterSignalEvent_VB6';
    function DAQmxRegisterSignalEvent(taskHandle:Longint; signalID:DAQmxSignal2; options:Longint; callbackFunction:Longint; callbackData:Pointer):Longint; stdcall; 
      

  2.   

    看到这个【'Dev1/port0/line0:1'】,是不是操作设备端口?