DeviceIoControl时,总是返回失败,错误码是87(参数错误)
直接上代码,各位看看,调用时总是失败,调用GetLastError时错误码是87(参数错误)
//---------------------------------------定义
BULK_TRANSFER_CONTROL=record
pipeNum:Cardinal;//对应ULONG
end;
m_Usb_Handle:THandle;//已经成功打开
//功能码是对的
function IOCTL_EZUSB_BULK_WRITE:DWORD;
begin
result:=CTL_CODE(FILE_DEVICE_UNKNOWN,Ezusb_IOCTL_INDEX+20,METHOD_IN_DIRECT,FILE_ANY_ACCESS);
end;
dataBuffer:Array[0..32] of Char;
dataBufferSize,lpBytesReturned:DWORD;
outBulkControl:BULK_TRANSFER_CONTROL;
outPBulkControl:Pointer;
//--------------------------------调用代码
//要下发16个字节的 1
dataBufferSize:=16;
for i:=0 to dataBufferSize-1 do
begin
dataBuffer[i]:=#1;
//dataBuffer[2*i]:='1';
//dataBuffer[2*i+1]:='1';
//dataBuffer[2*i+2]:=#0;
end;
outBulkControl.pipeNum:=2; //输出端点 0 Endpoint: 2 OUT
outPBulkControl:=@outBulkControl;
if (m_Usb_Handle<>Windows.INVALID_HANDLE_VALUE) then
begin
lpBytesReturned:=0;
if DeviceIoControl(m_Usb_Handle,IOCTL_EZUSB_BULK_WRITE,outPBulkControl,SizeOf(BULK_TRANSFER_CONTROL),
@dataBuffer,dataBufferSize,lpBytesReturned,nil) then
begin
//发送成功
Memo1.Lines.Add(Format('发送数据成功 Result=%d',[lpBytesReturned]));
end
else begin
iErrorCode:=windows.GetLastError;
Memo1.Lines.Add(Format('发送数据失败 ErrorCode=%d(%s) Result=%d OutBufferSize=%d',[iErrorCode,getErrorTextByCode(iErrorCode),lpBytesReturned,dataBufferSize]));
// GetLastError =87 〖87〗-参数错误。
end;
//执行后输出的结果是:
打开USB成功
发送数据失败 ErrorCode=87(参数错误) Result=0 OutBufferSize=16
Data->> 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
关闭USB成功
***** IOCTL_Ezusb_GET_PIPE_INFO ******
获得端口点列表数据成功 Result=56
Pipe Endpoint Direction Type Size
0 2 IN BLK 16
1 6 OUT BLK 512
请大家帮我看看,谢谢,分数我尽量多点,我的分也不多