線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2248
推到 Plurk!
推到 Facebook!

韌體描述元的設定是否會影響DevicePath的取得呢?

答題得分者是:taishyang
HUNK999
初階會員


發表:9
回覆:35
積分:28
註冊:2009-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-07-30 17:56:31 IP:220.130.xxx.xxx 未訂閱
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]
編輯記錄
HUNK999 重新編輯於 2009-07-30 17:57:34, 註解 無‧
HUNK999 重新編輯於 2009-07-30 17:58:59, 註解 無‧
HUNK999 重新編輯於 2009-07-30 21:29:04, 註解 無‧
HUNK999 重新編輯於 2009-07-30 21:38:56, 註解 無‧
HUNK999 重新編輯於 2009-07-30 21:42:21, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-07-30 18:14:24 IP:118.169.xxx.xxx 訂閱
大膽假設一下你的data alignment 是設定成BYTE嗎?
HUNK999
初階會員


發表:9
回覆:35
積分:28
註冊:2009-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-07-30 18:34:03 IP:220.130.xxx.xxx 未訂閱
有...之前search過相關文章...已將此設定成1 Byte
taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-07-30 19:07:20 IP:118.169.xxx.xxx 訂閱
通常都是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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-07-30 19:18:46 IP:220.130.xxx.xxx 未訂閱
更改以下程式 , 仍然出現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對齊

編輯記錄
HUNK999 重新編輯於 2009-07-30 19:19:33, 註解 無‧
HUNK999 重新編輯於 2009-07-30 19:20:41, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-07-30 19:22:38 IP:118.169.xxx.xxx 訂閱
將專案上傳,讓前輩們看看問題在哪 ^^
HUNK999
初階會員


發表:9
回覆:35
積分:28
註冊:2009-07-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-07-30 22:00:08 IP:118.169.xxx.xxx 未訂閱
已上傳
http://delphi.ktop.com.tw/board.php?cid=31&fid=97&tid=98988

===================引 用 taishyang 文 章===================
將專案上傳,讓前輩們看看問題在哪 ^^
taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-07-31 09:58:12 IP:118.169.xxx.xxx 訂閱
你不是用BCB?
而且是不是用錯檔案了,沒有看到你上面的程式碼
編輯記錄
taishyang 重新編輯於 2009-07-31 10:00:45, 註解 無‧
HUNK999
初階會員


發表:9
回覆:35
積分:28
註冊:2009-07-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-07-31 10:12:19 IP:220.130.xxx.xxx 未訂閱
我是用 .Net 2008 C++  windows form格式 ,

原始碼可用任何文字編輯器打開 --> 主檔為 "Form1.h"

http://delphi.ktop.com.tw/board.php?cid=31&fid=97&tid=98988
原始碼在上方連結頁面的附加檔案


===================引 用 taishyang 文 章===================
你不是用BCB?
而且是不是用錯檔案了,沒有看到你上面的程式碼
編輯記錄
HUNK999 重新編輯於 2009-07-31 10:15:01, 註解 無‧
HUNK999 重新編輯於 2009-07-31 11:55:46, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-07-31 10:17:41 IP:118.169.xxx.xxx 訂閱
噗,這裡是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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-07-31 10:25:36 IP:220.130.xxx.xxx 未訂閱
那我先選結案了 ,
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?
而且是不是用錯檔案了,沒有看到你上面的程式碼

編輯記錄
HUNK999 重新編輯於 2009-07-31 10:27:05, 註解 無‧
HUNK999 重新編輯於 2009-07-31 11:56:50, 註解 無‧
系統時間:2017-10-20 17:06:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!