2011-11-21 109 views
5

我一直在研究這個問題一段時間,我似乎無法做到。我有一個我想用delphi編寫的C++版本的軟件,但是我無法在delphi中使用它。我需要一些教程或指導,告訴我如何連接,讀取和寫入數據到HID USB設備。我如何與德爾福的HID USB設備進行通信

+0

接近的選票可能意味着您的問題缺乏足夠的細節可直接回復。我們是否應該用魔法知道你的C++程序的功能?爲什麼不拼出來? –

+1

我希望我可以投票不要關閉。請不要。這是一個關於使用與非常規設備交談的方法的普遍問題。細節可以晚點來。我,我也想知道這個高水平的答案。 – mj2008

回答

6

查看Jan Axelson's USB page的例子。他也寫了一本書。 USB Complete。請參閱Robert Marquardt's HID controller suite for Delphi

如果您正在使用的Delphi 2009或更高版本,請按照SO問題的答案中給出的鏈接:using-hidcontroller-on-delphi-2010

+1

每當我看到有人使用羅伯特的遺產:) ...... +1指出他的組件時,它讓我微笑。 – 0xC0000022L

+0

@STATUS_ACCESS_DENIED:+1 !!! – Remko

+0

謝謝,對於這個組件,有沒有關於如何使用它的指南。 – Grant

3

您可以使用QueryDosDevice得到充分的設備名稱。在插入設備之前和之後列出所有條目,並查看列表中出現哪些新條目。 (我發現大多數HID設備在列表中有兩次出現,還沒有找到爲什麼)。該代碼將包含「USB」「VID」「PID」和一個GUID。

如果以'\\?\'爲前綴並將此句柄用作串行端口(我個人更喜歡使用THandleStream),則可以使用此代碼與CreateFile。代碼可能看起來像這樣:

var 
    h:THandle; 
begin 
    h:=CreateFile(
    PChar('\\?\'+MyPortName), 
    GENERIC_WRITE or GENERIC_READ,FILE_SHARE_WRITE or FILE_SHARE_READ, 
    nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); 
    if h=INVALID_HANDLE_VALUE then RaiseLastOSError; 
    MyPort:=THandleStream.Create(h); 
    SetCommTimeouts(h,MyFCommTimeouts);