可以幫忙翻譯vb轉bcb code嗎? |
尚未結案
|
harvey30438
一般會員 發表:2 回覆:5 積分:1 註冊:2004-12-15 發送簡訊給我 |
'USBHID.DLL
'有四個api
'opendevice : 開始與HID裝置通訊
'Writedevice : 傳送資料到HID裝置
'Readdevice : 從HID裝置接收資料
'closedevice : 結束與HID裝置通訊 Public hid As New HIDUSB
Const MyVendorID = &H1234 ; 販售商VID碼
Const MyProductID = &H5678 ; 產品PID碼
Dim Timeout As Boolean
Private Sub Command1_Click()
Dim hiddevice As Boolean
Dim send(7) As Byte
Dim recevice() As String
hiddevice = hid.opendevice(MyVendorID, MyProductID) ; 判斷是否含有HID裝置
Text1.Text = hiddevice
If hiddevice = True Then
send(0) = Val("&H" Text2.Text) ; 如果含有人工界面裝置,就送出一個位元組資料
hid.Writedevice send()
Timeout = False
Timer1.Enabled = True
Timer1.Interval = 50
Do
DoEvents
Loop Until Timeout = True
recevice() = hid.Readdevice ' 接收一個位元組資料
Text3.Text = recevice(0)
End If
hid.closedevice
End Sub Private Sub text2_KeyPress(KeyAscii As Integer)
If (Chr$(KeyAscii) Like "[!A-Fa-f0-9]") Then KeyAscii = 0
End Sub
Private Sub timer1_Timer()
Timeout = True
Timer1.Enabled = False
End Sub 發表人 - harvey30438 於 2004/12/16 02:06:21
|
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
|
harvey30438
一般會員 發表:2 回覆:5 積分:1 註冊:2004-12-15 發送簡訊給我 |
抱歉..不過我有幾個地方還是不太懂ㄟ
Public hid As New HIDUSB
^^^^^^^^^^^^^^^^^^^^^^^^^這樣的宣告是什麼意思阿
Const MyVendorID = &H1234 ; 販售商VID碼
Const MyProductID = &H5678 ; 產品PID碼
Dim Timeout As Boolean
Private Sub Command1_Click()
Dim hiddevice As Boolean
Dim send(7) As Byte
Dim recevice() As String
hiddevice = hid.opendevice(MyVendorID, MyProductID) ; 判斷是否含有HID裝置
^^^^^^^^^^^^^^^這樣的呼叫方式在bcb要怎麼呼叫..
Text1.Text = hiddevice
If hiddevice = True Then
send(0) = Val("&H" + Text2.Text) ; 如果含有人工界面裝置,就送出一個位元組資料
hid.Writedevice send() //send()裡沒有給數字可以使用??
Timeout = False
Timer1.Enabled = True Timer1.Interval = 50 Do
DoEvents //這在bcb該怎麼使用
Loop Until Timeout = True
recevice() = hid.Readdevice ' 接收一個位元組資料
^^^^^^^^^^我真的搞不懂沒加數字跟有加數字的差別
Text3.Text = recevice(0)
End If
hid.closedevice
End Sub
各位大大真抱歉...vb的語法真的看不懂@@
最近一值在爬有關use控制的文章
不過越爬越頭痛=.=
感覺好複雜阿/_ 發表人 - harvey30438 於 2004/12/16 20:13:42
|
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
harvey30438:
1.
Public hid As New HIDUSB.就是指
在Public中宣告一各HIDUSB類型的hid指標.
2.
hiddevice = hid.opendevice(MyVendorID, MyProductID) ;
^^^^^^^^^^^^^^^這樣的呼叫方式在bcb要怎麼呼叫..
如過沒錯ㄉ話
opendevice應該是USBHID.DLL中的函式.
所以說你要先利用我前一篇所提供的文章.
將DLL的函數指標建立好.這樣才可以直接只用.
3.
VB中的DoEvents它的作用是轉讓控制權,以便操作系統處理事件.
在BCB中你可以使用 Application->ProcessMessages()來達到一樣的效果
4.建議有空去翻翻VB的書.其實VB語法蠻簡單.這樣的話你在做轉換會比較輕鬆 發表人 - 李國維 於 2004/12/17 10:28:33
|
無故障
一般會員 發表:17 回覆:69 積分:17 註冊:2004-03-11 發送簡訊給我 |
隨便翻,供參考 ^_^
//------------------------------------------------------- //USBHID.DLL //有四個api //opendevice : 開始與HID裝置通訊 //Writedevice : 傳送資料到HID裝置 //Readdevice : 從HID裝置接收資料 //closedevice : 結束與HID裝置通訊 Public hid As New HIDUSB Const MyVendorID = &H1234 ; //販售商VID碼 Const MyProductID = &H5678 ;// 產品PID碼 bool Timeout ; Private Sub Command1_Click() { bool hiddevice ; char send[7] AnsiString recevice hiddevice = hid.opendevice(MyVendorID, MyProductID) ; //判斷是否含有HID裝置 Text1->Text = hiddevice ; if ( hiddevice == True) { send(0) = Val("&H" Text2.Text) ; 如果含有人工界面裝置,就送出一個位元組資料 hid.Writedevice send() ; Timeout = False ; Timer1->Enabled = True ; Timer1->Interval = 50 ; //Do //DoEvents //Loop Until Timeout = True while (Timeout != True ) { Application->ProcessMessages(); } recevice() = hid.Readdevice;// ' 接收一個位元組資料 Text3->Text = recevice(0); }; hid.closedevice ; };//End Sub Private Sub text2_KeyPress(KeyAscii As Integer) { //If (Chr$(KeyAscii) Like "[!A-Fa-f0-9]") Then KeyAscii = 0 //請自行判斷 keyin 代號 };//End Sub //----------------------------------------------------------- Private Sub timer1_Timer() { Timeout = True; Timer1.Enabled = False; };//End Sub //-------------------------------------------------------應該有問題嗎.... ^_^ 練習! 練習! 再練習!
------
嘿嘿嘿 |
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
harvey30438 您好
程式碼請縮排,敬請配合,詳請參考
【公告】程式碼張貼規則與方法
|
harvey30438
一般會員 發表:2 回覆:5 積分:1 註冊:2004-12-15 發送簡訊給我 |
引言: harvey30438: 1. Public hid As New HIDUSB.就是指 在Public中宣告一各HIDUSB類型的hid指標. 2. hiddevice = hid.opendevice(MyVendorID, MyProductID) ; ^^^^^^^^^^^^^^^這樣的呼叫方式在bcb要怎麼呼叫.. 如過沒錯ㄉ話 opendevice應該是USBHID.DLL中的函式. 所以說你要先利用我前一篇所提供的文章. 將DLL的函數指標建立好.這樣才可以直接只用. 3. VB中的DoEvents它的作用是轉讓控制權,以便操作系統處理事件. 在BCB中你可以使用 Application->ProcessMessages()來達到一樣的效果 4.建議有空去翻翻VB的書.其實VB語法蠻簡單.這樣的話你在做轉換會比較輕鬆 發表人 - 李國維 於 2004/12/17 10:28:33真的很感激~~ 謝謝你的指導囉^^ 看來我還有得學勒^^" |
harvey30438
一般會員 發表:2 回覆:5 積分:1 註冊:2004-12-15 發送簡訊給我 |
引言: harvey30438 您好 程式碼請縮排,敬請配合,詳請參考 【公告】程式碼張貼規則與方法抱歉..原來你所謂的縮排是這個意思^^" 以後會注意 |
harvey30438
一般會員 發表:2 回覆:5 積分:1 註冊:2004-12-15 發送簡訊給我 |
extern "C" __declspec(dllimport) void __stdcall opendevice(const MyVendorID,const MyProductID); //extern "C" __declspec(dllimport) void __stdcall Writedevice(Byte x); //extern "C" __declspec(dllimport) void __stdcall closedevice(); const MyVendorID=0x1234; const MyProductID=0x5678; bool Timeout; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { bool (*openhid)(const ,const ); //void (*writehid)(Byte x); void (*closehid)(); HINSTANCE hid=LoadLibrary("USB_HID.dll"); (FARPROC &)openhid=GetProcAddress(hid,"opendevice"); //(FARPROC &)writehid=GetProcAddress(hid,"Writedevice"); (FARPROC &)closehid=GetProcAddress(hid,"closedevice"); bool hiddevice; hiddevice=true; byte send[7]; hiddevice =openhid(MyVendorID, MyProductID); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 我快瘋了..函數指標也建立好了 但是執行此DLL內建函數時還是會出現錯誤 是我函式設定的格式不符合嗎? 還是有可能哪邊沒注意到發表人 - harvey30438 於 2004/12/19 04:29:15 |
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |