韌體描述元的設定是否會影響DevicePath的取得呢? |
答題得分者是:taishyang
|
HUNK999
初階會員 發表:9 回覆:35 積分:28 註冊:2009-07-23 發送簡訊給我 |
HID描述元如果是Digitizer , 是否會影響DevicePath的取得呢?
我試了HID Mouse也無法取得DevicePath (是因為系統獨佔設備嗎?) 以下是我部份的程式碼: [code cpp] HANDLE GetDeviceHandle(GUID* pGuid, DWORD instance) { //if(m_hHid == INVALID_HANDLE_VALUE) return NULL; HDEVINFO info = SetupDiGetClassDevs(pGuid,NULL,NULL,DIGCF_PRESENT|DIGCF_INTERFACEDEVICE); //取得目前HID裝置的資訊 if(info == INVALID_HANDLE_VALUE) //判斷是否資訊取得成功 { fprintf(fp1,"No available for this GUID !\n"); return NULL; } SP_DEVICE_INTERFACE_DATA ifdata; //宣告界面的資料 ifdata.cbSize = sizeof(ifdata); //宣告界面資料的大小 if(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, instance, &ifdata)) //列舉裝置 { fprintf(fp1,"SetupDiEnumDeviceInterfaces Error ! 第%d個instance , 沒找到HID裝置 ! \n",instance); SetupDiDestroyDeviceInfoList(info); return NULL; } DWORD ReqLen; // 此行設中斷點 ifdata->cbSize = 28 SetupDiGetDeviceInterfaceDetail(info, &ifdata, NULL, 0, &ReqLen, NULL); PSP_INTERFACE_DEVICE_DETAIL_DATA ifDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)(new char[ReqLen]); int ErrorCode2 = GetLastError(); //<-- ErrorCode = 122 --> 顯示Buffer不足??? if(ifDetail==NULL) { fprintf(fp1,"ifDetail == NULL !\n"); SetupDiDestroyDeviceInfoList(info); return NULL; } ifDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA); if(!SetupDiGetDeviceInterfaceDetail(info, &ifdata, ifDetail, ReqLen, NULL, NULL)) { fprintf(fp1,"SetupDiGetDeviceInterfaceDetail Error !\n"); SetupDiDestroyDeviceInfoList(info); delete ifDetail; return NULL; } HANDLE pDevice = CreateFile(ifDetail->DevicePath, // <--為何DevicePath無法取得 , 是空的?! GENERIC_READ | GENERIC_WRITE, //0 FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); int ErrorCode = GetLastError(); if(ErrorCode==5) { fprintf(fp1,"第%d個instance , ErrorCode = %d , 設備讀取被拒絕 ! ( HID = Keyboard or Mouse ) \n\n\n\n\n",instance,ErrorCode); } else { fprintf(fp1,"DevicePath = %s\n\n",ifDetail->DevicePath); fprintf(fp1,"instance = %d , Error Code = %d\n\n",instance,ErrorCode); } if(pDevice==INVALID_HANDLE_VALUE)pDevice = NULL; delete ifDetail; SetupDiDestroyDeviceInfoList(info); return pDevice; } [/code] |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
HUNK999
初階會員 發表:9 回覆:35 積分:28 註冊:2009-07-23 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
通常都是sizeof算錯導致
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=57122 裡面有error code = 122的討論 再次大膽假設 利用 #pragma pack(push, 1) #incliude "xxx.h" #pragma pack(pop) 將USB相關的inlcude的檔案強制用BYTE對齊 |
HUNK999
初階會員 發表:9 回覆:35 積分:28 註冊:2009-07-23 發送簡訊給我 |
更改以下程式 , 仍然出現ErrorCode = 122的問題
[code cpp] #pragma pack(push, 1) #include #include #include extern "C" { #include #include } #pragma pack(pop) [/code] ===================引 用 taishyang 文 章=================== 通常都是sizeof算錯導致 http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=57122 裡面有error code = 122的討論 再次大膽假設 利用 #pragma pack(push, 1) #incliude "xxx.h" #pragma pack(pop) 將USB相關的inlcude的檔案強制用BYTE對齊 |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
HUNK999
初階會員 發表:9 回覆:35 積分:28 註冊:2009-07-23 發送簡訊給我 |
已上傳
http://delphi.ktop.com.tw/board.php?cid=31&fid=97&tid=98988 ===================引 用 taishyang 文 章=================== 將專案上傳,讓前輩們看看問題在哪 ^^ |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
HUNK999
初階會員 發表:9 回覆:35 積分:28 註冊:2009-07-23 發送簡訊給我 |
我是用 .Net 2008 C++ windows form格式 ,
原始碼可用任何文字編輯器打開 --> 主檔為 "Form1.h" http://delphi.ktop.com.tw/board.php?cid=31&fid=97&tid=98988 原始碼在上方連結頁面的附加檔案 ===================引 用 taishyang 文 章=================== 你不是用BCB? 而且是不是用錯檔案了,沒有看到你上面的程式碼 |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
噗,這裡是BCB區 ^^|
上述所說的data alignment造成sizeof結果不同也是BCB環境才有的現象 .Net的環境沒用過所以不清楚 ===================引 用 HUNK999 文 章=================== 我是用 .Net 2008 C windows form格式 , 原始碼可用任何文字編輯器打開 --> 主檔為 "Form1.h" http://delphi.ktop.com.tw/board.php?cid=168&fid=917&tid=98984 原始碼在上方連結頁面的附加檔案
編輯記錄
taishyang 重新編輯於 2009-07-31 10:39:39, 註解 無‧
|
HUNK999
初階會員 發表:9 回覆:35 積分:28 註冊:2009-07-23 發送簡訊給我 |
那我先選結案了 ,
data alignment的設定 , 我在環境內可設定 ... 另外 , Windows form C 下是可以撰寫一般C的語法 , 故HID API Function使用上是完全相同的... 請高手幫我看看Form1.h 內的 HID 邏輯對不對? 謝謝 HID程式只有以下兩個副程式會用到 , 共100行左右 1. private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {....} 2. HANDLE GetDeviceHandle(GUID* pGuid, DWORD instance) {....} ===================引 用 taishyang 文 章=================== 噗,這裡是BCB區 ^^| 上述所說的data alignment也是BCB環境才有的現象 ===================引 用 HUNK999 文 章=================== 我是用 .Net 2008 C windows form格式 , 原始碼可用任何文字編輯器打開 --> 主檔為 "Form1.h" 我是用 .Net 2008 C windows form格式 , 原始碼可用任何文字編輯器打開 --> 主檔為 "Form1.h" http://delphi.ktop.com.tw/board.php?cid=31&fid=97&tid=98988 原始碼在上方連結頁面的附加檔案 ===================引 用 taishyang 文 章=================== 你不是用BCB? 而且是不是用錯檔案了,沒有看到你上面的程式碼 原始碼在上方連結頁面的附加檔案 ===================引 用 taishyang 文 章=================== 你不是用BCB? 而且是不是用錯檔案了,沒有看到你上面的程式碼 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |