程序出错的最主要的代码如下:procedure TForm1.Button1Click(Sender: TObject);
var
TaskHandle : Longint; intErrCode : Integer;
begin
//ErrorNULLPtr = $FFFCF064;
//ErrorInvalidDeviceID = $FFFCF1E4; //-200220
//ErrorInvalidTask = $FFFCF268; //-200088 //c: taskHandle 0x6deb1cc0 void *
//delphi: taskHandle 0x6deb1cc0
//c: &taskHandle 0x0012ff54 void * *
//delphi: @TaskHandle 12f58c intErrCode := DAQmxCreateTask('' , @TaskHandle);
memo1.Lines.Add('ErrCode: ' + Format('%x' , [intErrCode])); //c:taskhandle = 0x6deb1cc0
//delphi:taskhandle $6deb1cc0 //1844124864
//c:DAQmx_Val_Cfg_Default -1 ffffffff// Default
//delphi:DAQmx_Val_Cfg_Default = $FFFFFFFF
//c:DAQmx_Val_Volts 10348 286c// Volts
//delphi:DAQmx_Val_VoltageUnits1_Volts = $0000286C intErrCode := DAQmxCreateAIVoltageChan(taskHandle , 'Dev1/ai0' , '' ,
DAQmx_Val_Cfg_Default , -10.0 , 10.0 , DAQmx_Val_VoltageUnits1_Volts , '');
memo1.Lines.Add('ErrCode: ' + Format('%x' , [intErrCode]));end;end.
在运行DAQmxCreateTask时,intErrCode返回0,表示正常;
在运行到调用函数DAQmxCreateAIVoltageChan时,intErrCode返回FFFCF268,即:-200088,我查了一下,是报ErrorInvalidTask错误,原型函数的声明(XNIDAQmx.pas)声明如下:
unit XNIDAQmx;interface
uses
Windows , ActiveX , Classes , Graphics , StdVCL , Variants , SysUtils , XNIDAQmxCAPI_TLB;//typedef void* TaskHandle;
//int32 __CFUNC DAQmxCreateTask (const char taskName[], TaskHandle *taskHandle);
function DAQmxCreateTask(taskName : PChar; taskHandle : PLongint) : Longint; stdcall ; external 'nicaiu.dll';//int32 __CFUNC DAQmxCreateAIVoltageChan
//(TaskHandle taskHandle, const char physicalChannel[], const char nameToAssignToChannel[],
//int32 terminalConfig, float64 minVal, float64 maxVal,
//int32 units, const char customScaleName[]);
//DAQmxCreateAIVoltageChan(taskHandle,"WLS-13BC5DC/ai0","",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL))
function DAQmxCreateAIVoltageChan(taskHandle : Longint ; physicalChannel : PChar;
nameToAssignToChannel : PChar; terminalConfig : DAQmxInputTermCfg;
minVal : Double ; maxVal:Double ; units : DAQmxVoltageUnits2 ; customScaleName : PChar) : Longint ;
stdcall ; external 'nicaiu.dll';function DAQmxCfgSampClkTiming(taskHandle : Longint ; source : PChar ; rate : Double;
activeEdge:DAQmxEdge; sampleMode:DAQmxAcquisitionType; sampsPerChan:Longint):Longint; stdcall; external 'nicaiu.dll';
function DAQmxStartTask(taskHandle:Longint):Longint; stdcall; external 'nicaiu.dll';
function DAQmxReadAnalogF64(taskHandle : Longint; numSampsPerChan:Longint; timeout:Double;
fillMode:DAQmxFillMode; readArray:array of double; arraySizeInSamps:Longint;
sampsPerChanRead:Integer; reserved:Pointer):Longint; stdcall;external 'nicaiu.dll';function DAQmxGetErrorString(errorCode : Longint ; errorString : PChar ;
bufferSize : Longint) : Longint ; stdcall ; external 'nicaiu.dll';
function DAQmxGetExtendedErrorInfo(errorString : PChar ; bufferSize : Longint) : Longint ;
stdcall ; external 'nicaiu.dll';调试了好几天了,就是找不到原因,拜托请帮忙查看一下错误原因。多谢啦。
var
TaskHandle : Longint; intErrCode : Integer;
begin
//ErrorNULLPtr = $FFFCF064;
//ErrorInvalidDeviceID = $FFFCF1E4; //-200220
//ErrorInvalidTask = $FFFCF268; //-200088 //c: taskHandle 0x6deb1cc0 void *
//delphi: taskHandle 0x6deb1cc0
//c: &taskHandle 0x0012ff54 void * *
//delphi: @TaskHandle 12f58c intErrCode := DAQmxCreateTask('' , @TaskHandle);
memo1.Lines.Add('ErrCode: ' + Format('%x' , [intErrCode])); //c:taskhandle = 0x6deb1cc0
//delphi:taskhandle $6deb1cc0 //1844124864
//c:DAQmx_Val_Cfg_Default -1 ffffffff// Default
//delphi:DAQmx_Val_Cfg_Default = $FFFFFFFF
//c:DAQmx_Val_Volts 10348 286c// Volts
//delphi:DAQmx_Val_VoltageUnits1_Volts = $0000286C intErrCode := DAQmxCreateAIVoltageChan(taskHandle , 'Dev1/ai0' , '' ,
DAQmx_Val_Cfg_Default , -10.0 , 10.0 , DAQmx_Val_VoltageUnits1_Volts , '');
memo1.Lines.Add('ErrCode: ' + Format('%x' , [intErrCode]));end;end.
在运行DAQmxCreateTask时,intErrCode返回0,表示正常;
在运行到调用函数DAQmxCreateAIVoltageChan时,intErrCode返回FFFCF268,即:-200088,我查了一下,是报ErrorInvalidTask错误,原型函数的声明(XNIDAQmx.pas)声明如下:
unit XNIDAQmx;interface
uses
Windows , ActiveX , Classes , Graphics , StdVCL , Variants , SysUtils , XNIDAQmxCAPI_TLB;//typedef void* TaskHandle;
//int32 __CFUNC DAQmxCreateTask (const char taskName[], TaskHandle *taskHandle);
function DAQmxCreateTask(taskName : PChar; taskHandle : PLongint) : Longint; stdcall ; external 'nicaiu.dll';//int32 __CFUNC DAQmxCreateAIVoltageChan
//(TaskHandle taskHandle, const char physicalChannel[], const char nameToAssignToChannel[],
//int32 terminalConfig, float64 minVal, float64 maxVal,
//int32 units, const char customScaleName[]);
//DAQmxCreateAIVoltageChan(taskHandle,"WLS-13BC5DC/ai0","",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL))
function DAQmxCreateAIVoltageChan(taskHandle : Longint ; physicalChannel : PChar;
nameToAssignToChannel : PChar; terminalConfig : DAQmxInputTermCfg;
minVal : Double ; maxVal:Double ; units : DAQmxVoltageUnits2 ; customScaleName : PChar) : Longint ;
stdcall ; external 'nicaiu.dll';function DAQmxCfgSampClkTiming(taskHandle : Longint ; source : PChar ; rate : Double;
activeEdge:DAQmxEdge; sampleMode:DAQmxAcquisitionType; sampsPerChan:Longint):Longint; stdcall; external 'nicaiu.dll';
function DAQmxStartTask(taskHandle:Longint):Longint; stdcall; external 'nicaiu.dll';
function DAQmxReadAnalogF64(taskHandle : Longint; numSampsPerChan:Longint; timeout:Double;
fillMode:DAQmxFillMode; readArray:array of double; arraySizeInSamps:Longint;
sampsPerChanRead:Integer; reserved:Pointer):Longint; stdcall;external 'nicaiu.dll';function DAQmxGetErrorString(errorCode : Longint ; errorString : PChar ;
bufferSize : Longint) : Longint ; stdcall ; external 'nicaiu.dll';
function DAQmxGetExtendedErrorInfo(errorString : PChar ; bufferSize : Longint) : Longint ;
stdcall ; external 'nicaiu.dll';调试了好几天了,就是找不到原因,拜托请帮忙查看一下错误原因。多谢啦。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货