全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2249
推到 Plurk!
推到 Facebook!

讀取hid dll使用問題

尚未結案
c7904520
一般會員


發表:2
回覆:1
積分:0
註冊:2009-11-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-11-27 16:05:05 IP:183.17.xxx.xxx 訂閱
 各位大大好!
小弟第一次接觸usb hid的裝置,手上有讀寫此usb的dll在宣告上遇到些問題
望各位大大幫忙,在此先謝謝!!! DLL的FUNTION : BOOL ReadUSB(HANDLE hDevice,LPVOID pData, DWORD nLen,LPOVERLAPPED pOV,DWORD dwTime); 在DELPHI我是這樣的使用,不知道是否正確。
[code delphi]
unit HID_DLL_Test;interface    uses      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls,     ShellAPI, Winsock, IdWinSock2;    function FindUSB(dwVID, dwPID: DWORD; bSync: BOOL): tHANDLE; stdcall;external 'HIDApi.dll';    function CloseHIDDevice(hDevice: tHANDLE): BOOL; STDCALL; EXTERNAL 'hidaPI.DLL';    function ReadUSB(hDevice: THANDLE; pData: pointer; nLen: DWORD; pOV:  LPWSAOVERLAPPED; dwTime: DWORD):     BOOL; external 'HIDApi.dll';    procedure TForm1.Button1Click(Sender: TObject);    var      i: integer;      p: pointer;      ReadState: boolean;      Buf: array [0 .. 8] of byte;      pOV: PWSAOverlapped;    begin      //p := addr(Buf);      Memo1.Lines.add('暫存區長度 :');      Memo1.Lines.add(format('%d',[sizeof(Buf)]));      fillMemory(@Buf, SizeOf(Buf), 0); // 記憶體set 0       Memo1.Lines.add('暫存區初始化: ');      Memo1.Lines.add(format('%0.2X %0.2X %0.2X %0.2X %0.2X %0.2X %0.2X %0.2X %0.2X', [Buf[0], Buf[1], Buf[2], Buf[3], Buf[4], Buf[5], Buf[6], Buf[7], Buf[8]]));  hUSB := FindUSB($04D9, $A057, flag);      Memo1.Lines.add('USB Handle: '   inttostr(hUSB));      if hUSB >= 32 then      begin        ReadState := ReadUSB(hUSB, p, sizeof(Buf), nil, 0);// 讀取usb資料        if ReadState then // 讀取成功,顯示讀取的內容        begin          Memo1.Lines.add('讀取成功!');          Memo1.Lines.add('回傳值: '   format('%0x %0x %0x %0x %0x %0x %0x %0x %0x', [Buf[0], Buf[1], Buf[2], Buf[3], Buf[4], Buf[5], Buf[6], Buf[7]]));        end        else        begin          Memo1.Lines.add('讀取失敗!');        end;      end      else      begin        ShowMessage('NO Device!');      end;      if CloseHIDDevice(hUSB) then        Memo1.Lines.add('USB連線結束!!')      ELSE        Memo1.Lines.add('結束USB連線失敗!!');      Memo1.Lines.add('');    end;
[/code]
ReadUSB(hUSB, p, sizeof(Buf), nil, 0)<<<-----------程式執行於此就會發生錯誤 這是錯誤訊息:First chance exception at $74D39617. Exception class EAccessViolation with message 'Access violation at address 74D3F213 in module 'KERNELBASE.dll'. Write of address 0000A057'. Process Project1.exe (14528)

不知道LPOVERLAPPED在delphi 裡是否就是直接宣告 IdWinSock2並且宣告物件為LPWSAOVERLAPPED的型態。這問題已經困擾很久哩,希望各位大大能夠幫忙指點一下,第一次發問若需改進地方,再請各位大大提醒^__^ 在這先謝謝!
------
Delphi新手努力學習中!
取之於網路,回饋於網路!
編輯記錄
c7904520 重新編輯於 2010-11-27 01:06:28, 註解 無‧
c7904520 重新編輯於 2010-11-27 01:11:37, 註解 無‧
c7904520 重新編輯於 2010-11-27 01:12:32, 註解 無‧
c7904520 重新編輯於 2010-11-27 01:14:36, 註解 無‧
c7904520 重新編輯於 2010-11-27 01:15:45, 註解 無‧
c7904520 重新編輯於 2010-11-27 01:17:25, 註解 無‧
c7904520 重新編輯於 2010-11-27 18:57:34, 註解 無‧
c7904520 重新編輯於 2010-11-27 19:00:57, 註解 無‧
c7904520 重新編輯於 2010-11-27 19:11:00, 註解 無‧
c7904520 重新編輯於 2010-11-27 19:12:09, 註解 無‧
c7904520 重新編輯於 2010-11-27 19:15:10, 註解 無‧
c7904520 重新編輯於 2010-11-27 19:15:42, 註解 無‧
c7904520 重新編輯於 2010-11-27 19:18:45, 註解 無‧
c7904520 重新編輯於 2010-11-27 19:21:12, 註解 無‧
c7904520 重新編輯於 2010-11-27 19:21:51, 註解 無‧
系統時間:2017-12-13 4:06:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!