阅读:1150回复:3
哪位高手能帮我诊断这段程序?
已有一个经“Cypress控制面板程序”验证能正常Bulk输入输出的Bix 文件;在我自己的Delphi5应用程序中不能成功。
这个问题在调试跟踪时,DeviceIoControl 函数总是返回False,是否此函数的参数我送的不对? ----------------------------- procedure TForm1.BtnBulk1Click(Sender: TObject); // Bulk传输,将文本框Edit2里的字符内容,通过端点2OUT送到AN2131里去 type _BulkBuffer = array[0..63] of char; pBulkBuffer = ^_BulkBuffer; var sTmp:string; iTmp:integer; pipeID: ULONG; Buffer: pBulkBuffer; Size: Byte; dataLen: DWORD; InterfaceInfo:USBD_INTERFACE_INFORMATION; ioctl_valWORD; bulkControl:BULK_TRANSFER_CONTROL; nBytes: DWORD; bResult: Boolean; begin if not(bOpenDriver(hDevice, pcDriverName)) then exit; Size := Edit2.GetTextLen; Inc(Size); GetMem(Buffer, Size); // 申请内存 Edit2.GetTextBuf(Buffer^,Size); // 将文本框Edit2的字符内容送到Buffer所指的内存区域 dataLen:= Size; // pipeID := 2; // 选择第 2 号管道,Endpoint 2 OUT,BULK模式 bulkControl.pipeNum:= pipeID; bResult := GetInterfaceInfo(hDevice, InterfaceInfo, nBytes); if (not bResult) then showmessage(\'获取接口信息出错\'); If (InterfaceInfo.Pipes[pipeID].EndpointAddress > 128) Then ioctl_val:= IOCTL_EZUSB_BULK_READ // 读 else ioctl_val:= IOCTL_EZUSB_BULK_WRITE; // 写 nBytes:= 0; bResult := DeviceIoControl(hDevice, ioctl_val, @bulkControl, // 指向 BULK_TRANSFER_CONTROL 结构的指针 Sizeof(BULK_TRANSFER_CONTROL), // BULK_TRANSFER_CONTROL 结构的长度 Buffer, // 指向Bulk传输(收/发)缓冲区的指针,????????????错了么? dataLen, // 缓冲区长度,?????????????????????????????????错了么? nBytes, // 0); if(not bResult) then showmessage(\'Bulk传输失败\'); // 为什么 DeviceIoControl 函数总是返回False ???????????????????????????????????? CloseHandle (hDevice); // 关设备 FreeMem(Buffer); // 释放内存 end; |
|
最新喜欢:![]()
|
沙发#
发布于:2002-05-12 10:06
bResult := DeviceIoControl(hDevice,
ioctl_val, @bulkControl, // 指向 BULK_TRANSFER_CONTROL 结构的指针 Sizeof(BULK_TRANSFER_CONTROL), // BULK_TRANSFER_CONTROL 结构的长度 Buffer, // 指向Bulk传输(收/发)缓冲区的指针,????????????错了么? dataLen, // 缓冲区长度,?????????????????????????????????错了么? nBytes, // 注意,这儿必须传递指针!!!!!!!! 0); 对了,给点分!!!!!! |
|
板凳#
发布于:2002-05-12 10:21
bResult := DeviceIoControl(hDevice, 不对呀,编译无法通过? |
|
|
地板#
发布于:2002-05-12 10:41
bResult := DeviceIoControl(hDevice, >>>>>>这儿必须传递指针!!!!!!!! 不对,在Windows API原型这里应是指针,但是Delphi的Windows.pas里对这个API包装后是: function DeviceIoControl( hDevice: THandle; dwIoControlCode: DWORD; lpInBuffer: Pointer; nInBufferSize: DWORD; lpOutBuffer: Pointer; nOutBufferSize: DWORD; var lpBytesReturned: DWORD; // <<<<<<<<<< lpOverlapped: POverlapped): BOOL; stdcall; 就是说这个参数是按变量传递的参数,这个参数须是DWORD型,不是指针了。 |
|
|