硬件接口编程问题!急!谢谢!(100分)

  • 主题发起人 主题发起人 wanpeng
  • 开始时间 开始时间
W

wanpeng

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟初涉及硬件编程,请各位老大多多帮忙!感激不尽!
我想异步读USB的信息,注意是异步,同步可以成功:
hDev := CreateFile(
DevInterface.DevicePath(),
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL
);
Quit := False;
while not Quitdo
begin
Application.ProcessMessages;
bRet := ReadFile(hDev,lpBuf,dwLength,&dwReturned,lpOverlapped);
end;

OnClick: Quit=True;
可是根本无法读出我的硬件,我用
WaitForSingleObject(lpOverlapped->hEvent, 2000)
可以响应IO操作,但是ReadFile读不出来,为什么呢?
因为是用VC编DLL,Delphi调用,所以上面的语言比较乱,但是保证语法正确
 
帮你提前.
 
我也学学。
 
可是根本无法读出我的硬件
但是ReadFile读不出来
你到底是什么读不出啊,你把VC代码贴出来看看
 
最好是VC的!
 
在VC的DLL中:
BOOL XXGMgr_StatusRead(LPBYTE lpBuf, DWORD dwLength)
{
BOOL bRet = FALSE;
DWORD dwErr;
DWORD dwRead;
OVERLAPPED Internal;
memset(&Internal,0,sizeof(OVERLAPPED));
Internal.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
if (Internal.hEvent == NULL) return FALSE;
LPOVERLAPPED lpOverlapped;
lpOverlapped = &Internal;

HANDLE hDev = OpenDevice(0, &dwErr);
if(hDev != INVALID_HANDLE_VALUE)
{
DWORD dwReturned;
bRet = ReadFile(hDev,lpBuf,dwLength,&dwReturned,lpOverlapped);
}
CloseHandle(hDev);
return bRet;
}
BYTE __stdcall ReadPin(int password)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if (password != 123)
{
return -1;
}
LPBYTE tr;
tr = (LPBYTE)malloc(1);
BOOL Result = XXGMgr_StatusRead(tr,1);
if (Result)
{
return *tr;
}
else
return 0;
free(tr);
}
在DELPHI的调用中:
procedure TMainDlg.StartButtonClick(Sender: TObject);
var
Res : Byte;
begin
StopButton.Enabled := True;
StartButton.Enabled := False;
Quit := False;
while not Quitdo
begin
Res := ReadPin(123);
end;
if Res<>0 then
begin
USBEdit.Text := IntToStr(Res);
end;
end;

procedure TMainDlg.StopButtonClick(Sender: TObject);
begin
Quit := True;
StopButton.Enabled := False;
StartButton.Enabled := True;
end;

谢谢大侠们,多费心吧,小弟正在看Chris Cant的《Windows WDM设备驱动程序开发指南》
头晕的要命,而且太慢,555
 
while not Quitdo
begin
Res := ReadPin(123);
Application.ProcessMessages;
end;
对不起,少了一行代码
 
只看这点代码什么也看不出来
一般来说低层的硬件性质、驱动程序都有关系
 
算了,看来没人解决的了
分分吧,都半年了...
 
多人接受答案了。
 
后退
顶部