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

可以幫忙翻譯vb轉bcb code嗎?

尚未結案
harvey30438
一般會員


發表:2
回覆:5
積分:1
註冊:2004-12-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-16 01:57:14 IP:221.169.xxx.xxx 未訂閱
'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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-16 11:23:35 IP:219.84.xxx.xxx 未訂閱
harvey30438
一般會員


發表:2
回覆:5
積分:1
註冊:2004-12-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-16 20:11:40 IP:221.169.xxx.xxx 未訂閱
抱歉..不過我有幾個地方還是不太懂ㄟ 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-17 10:18:02 IP:219.84.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-17 17:32:44 IP:61.221.xxx.xxx 未訂閱
隨便翻,供參考 ^_^        
 
//-------------------------------------------------------    //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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-17 18:50:18 IP:202.145.xxx.xxx 未訂閱
harvey30438 您好 程式碼請縮排,敬請配合,詳請參考 【公告】程式碼張貼規則與方法
harvey30438
一般會員


發表:2
回覆:5
積分:1
註冊:2004-12-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-18 00:13:48 IP:221.169.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-18 00:15:10 IP:221.169.xxx.xxx 未訂閱
引言: harvey30438 您好 程式碼請縮排,敬請配合,詳請參考 【公告】程式碼張貼規則與方法
抱歉..原來你所謂的縮排是這個意思^^" 以後會注意
harvey30438
一般會員


發表:2
回覆:5
積分:1
註冊:2004-12-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-12-19 04:28:16 IP:221.169.xxx.xxx 未訂閱
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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-12-19 20:18:11 IP:218.167.xxx.xxx 未訂閱
harvey30438: 1.你試試看把const改成long extern "C" __declspec(dllimport) void __stdcall opendevice(long MyVendorID,long MyProductID); bool (*openhid)(long ,long ); 2.你把中斷點設在下面這一行,看看hid的值是不是NULL. HINSTANCE hid=LoadLibrary("USB_HID.dll");
系統時間:2024-11-22 20:09:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!