首先我在writeport1函式宣告時遇到問題....byte*pdata...
*Pdata...在c裡的意思是指標位置所含的內容..
那我在宣告要如何寫??有誰可以給點意見
(2) DWORD __stdcall WritePort1 (BYTE* pData, size_t iLen);
簡介:寫USB端點1。
來源:EasyD12.dll
說明:pData爲指向發送資料緩衝區的指標,iLen爲發送資料長度。D12端點1緩衝區爲16位元組,iLen不大於16。如使用示例驅動,iLen不大於4。該函數主要用於傳送用戶的命令。
返回: <0 錯誤
=0 正確
舉例: unsigned char databuff[4]={’D’,’A’,’T’,’A’};
DWORD st= WritePort1 (databuff,4);
將databaff中前4個位元組寫入USB端點1
*Pdata...在c裡的意思是指標位置所含的內容..
那我在宣告要如何寫??有誰可以給點意見
(2) DWORD __stdcall WritePort1 (BYTE* pData, size_t iLen);
簡介:寫USB端點1。
來源:EasyD12.dll
說明:pData爲指向發送資料緩衝區的指標,iLen爲發送資料長度。D12端點1緩衝區爲16位元組,iLen不大於16。如使用示例驅動,iLen不大於4。該函數主要用於傳送用戶的命令。
返回: <0 錯誤
=0 正確
舉例: unsigned char databuff[4]={’D’,’A’,’T’,’A’};
DWORD st= WritePort1 (databuff,4);
將databaff中前4個位元組寫入USB端點1
文章標籤
全站熱搜

databuff可以用字串陣列 然後將dll引入 如dim a a=array("d","a","t","a") vb引用dll,有點要像c宣告函數型態
3q....我試試
恩...我試了一下...還是不行...因為我不知道引用dll type對不對 下面是我的程式...麻煩大大行個好...幫我看一下...感謝 ----------------------------------------------------------- Option Explicit Declare Function WritePort1 Lib "EasyD12" (ByRef lpBuffer As String, nSize As Byte) As Long /*這一行我不知道要如何設...像是我要不知用byval or byref...而且 as type....我也不知道要設啥好. 還有 ipbuffer 是不是不一定要用這個名子阿... Sub Main() Dim j As Byte Dim a a= Array("d", "a", "t", "a") j=16 WritePort1 a,j End Sub
i=WritePort1(a,4) 其他的都對
大大...請問你的i式啥麼 ?? 3q
Declare Function WritePort1 Lib "EasyD12" (ByRef lpBuffer As String, nSize As Byte) As Long 不是會傳回一個long用個變數得到一下
...對的...我試了一下...i 是回傳值.....不過我還是失敗嚕...因為是-1 哇勒....我再檢查檢查....感謝你的幫忙
再請教一個問題 (ByRef lpBuffer As String, nSize As Byte) Dim a a= Array("d", "a", "t", "a") a as ?? 3Q
下面是我目前的程式 ---------------------------------------------------------------- Option Explicit Declare Function WritePort1 Lib "EasyD12" (ByRef lpBuffer As Any, nSize As Byte) As Long Sub Main() Dim j As Byte Dim a Dim i As Long a = Array("d", "a", "t", "a") j = 16 i = WritePort1(a, 4) MsgBox "test=" & i, , "test" End Sub
原型為 DWORD __stdcall WritePort1 (BYTE* pData, size_t iLen); DWORD 用 Long 接,Byte* 用傳址呼叫接,Size_t 可用傳值呼叫送,除非 iLen 是 [out] 的 Long 才用傳址呼叫接 宣告有很多方法,盡量避免用 As Any 及 As String,而本函數雖然用 Byte,但看起來是要用 unsing char array,所以應該不是 UniCode ,則用法上有很多變換技巧,當然還是要搭配宣告: ReDim tByte() As Byte tByte = StrConv("DATA", vbFromUnicode) iLen = UBound(tByte) - LBound(tByte) + 1 1.將 tByte(0) 位置由傳址呼叫傳遞 Declare Function WritePort1 Lib "EasyD12" (ByRef lpBuffer As Byte, Byval iLen As Long) As Long summy = WritePort1(tByte(0), iLen) 2.將 tByte(0) 位置由傳值呼叫傳遞位置 Declare Function WritePort1 Lib "EasyD12" (ByVal lpBuffer As Long, Byval iLen As Long) As Long summy = WritePort1(VarPtr(tByte(0)), iLen) 這都是應用的方法,但是含字串的引數應避免直接使用,因為 VB 會主動將 UniCode 的字串轉回 ASCII 字串才傳給 API 使用,在 Type 或 String 都會。再則,VB 的不定長度字串一般在各種語言均不支援,C++ 的實作方式與 VB 在記憶體頭上不同,不應該直接用傳址呼叫傳遞字串,即使收字串皆應用傳值呼叫,相關解釋內容請參閱 VB 線上手冊,不再多說明,另外,你的需求還可以寫出很多種宣告及使用方式,不單上面兩種,如何決定最適宣告,需依據該函數說明書、實際用途及你程式的變換。 最後,VB 的預設型態 Variant 陣列不是這樣玩的,你這樣只是傳遞 a 這個 Variant 16 位元組變數過去,中間還有陣列描述結構與實體陣列兩段在不同記憶體區塊,根本無法識別。 關於 Variant 的討論,你可以看這篇: http://tlcheng.adsldns.org/Paper/Variant/Variant.htm
10萬分感謝-心冷熱情熄-與-水瓶天賞- 大大們的建議行的通拉...終於可以傳拉...
----------------------------埻最宒徨鷂write船祥嗣-------------------------- (1) DWORD __stdcall ReadPort1 (BYTE* pData, size_t iLen); ?賡ㄩ莮USB傷1﹝ 埭ㄩEasyD12.dll 挲隴ㄩpData?硌砃諉彶揃蹋?茇腔硌ㄛiLen?諉彶揃蹋墿僅﹝D12傷1?茇?16弇啋瞎ㄛiLen祥湮黺16﹝妏蚚尨瞰?ㄛiLen祥湮黺4﹝?滲翋猁蚚黺莮蚚腔隙﹝ 殿隙ㄩ <0 嶒悷 =0 淏復 麝瞰ㄩ unsigned char databuff[4]; DWORD st= ReadPort1 (databuff,4); USB傷1莮堤4?弇啋瞎揃蹋溫databuff笢 -------------------------------------------------------------------- 螜硉源醱賤賸.... 筍岆...婓莮硉源醱...衱郣善褣觳 Declare Function readPort1 Lib "EasyD12" (ByRef lpBuffer As Byte, Byval iLen As Long) As Long dim summy as long Dim ? As Byte summy = readPort1(?,iLen) MsgBox "test=" & summy, , "岆瘁衄莮硉" MsgBox "莮堤腔硉" ?,,"莮硉" 扂猁崋酕..符衄褫眕蚚msgbox鞞尨莮善usb腔硉儸?? 3q
----------------------------原程式碼與write差不多-------------------------- (1) DWORD __stdcall ReadPort1 (BYTE* pData, size_t iLen); ?介:讀USB端點1。 來源:EasyD12.dll 說明:pData?指向接收資料?衝區的指標,iLen?接收資料長度。D12端點1?衝區?16位元組,iLen不大於16。如使用示例?動,iLen不大於4。?函數主要用於讀取用戶的回應。 返回: <0 錯誤 =0 正確 舉例: unsigned char databuff[4]; DWORD st= ReadPort1 (databuff,4); 從USB端點1讀出4?位元組資料放入databuff中 -------------------------------------------------------------------- 雖然傳值方面解決了.... 但是...在讀值方面...又遇到難題 Declare Function readPort1 Lib "EasyD12" (ByRef lpBuffer As Byte, Byval iLen As Long) As Long dim summy as long Dim ? As Byte summy = readPort1(?,iLen) MsgBox "test=" & summy, , "是否有讀值" MsgBox "讀出的值" ?,,"讀值" 我要怎麼做..才有可以用msgbox顯示讀到usb的值呢??