[求助]關(guān)于CH341的api操作

API的使用是基于驅(qū)動(dòng)的嗎?即使沒有連接設(shè)備,CH341OpenDevice也能得到一個(gè)long型的返回值而不是-1,這正常嗎?即使同樣設(shè)備序號(hào)為0,函數(shù)也能重復(fù)的執(zhí)行來得到不重復(fù)的句柄返回值,這樣也是正常現(xiàn)象嗎? 是我應(yīng)該在程序邏輯上加以判斷還是調(diào)用上哪里出了問題呢?

CH341OpenDevice如果在沒有設(shè)備的時(shí)候,應(yīng)該是返回INVALID_HANDLE_VALUE這個(gè)值的。 重復(fù)打開是會(huì)返回不同的句柄值的,如果要獨(dú)占使用,調(diào)用函數(shù)CH341SetExclusive來設(shè)置。


謝謝 另外問下,api中的long是32位的還是64位的?


在Windows系統(tǒng)下,long型變量長度一般都是32位四字節(jié)。


Public Declare Function CH341OpenDevice Lib "CH341DLL.DLL" (ByVal iIndex As System.Int32) As System.Int32 ' 打開CH341設(shè)備,返回句柄,出錯(cuò)則無效 ' iIndex 指定CH341設(shè)備序號(hào),0對(duì)應(yīng)第一個(gè)設(shè)備

Try Dim zero As System.Int32 = 0 address = CH341OpenDevice(zero) MsgBox(address) Catch ex As Exception MsgBox("failed") End Try

還是搞不明白哪里有問題,結(jié)果總是顯示-1.....


順帶一提,CH341GetVersion的結(jié)果是33,這個(gè)不知道有沒有問題


不知道還有木有示例程序代碼的下載了,網(wǎng)站更新之后,有些老帖里的資源地址都下載不了了


-1的話就是無效句柄值,如果沒有341設(shè)備在電腦上,那這個(gè)是正常的值。CH341GetVersion返回33應(yīng)該是不對(duì)的,你是否裝的串口還是并口的驅(qū)動(dòng),在設(shè)備管理器里面是否有一個(gè)外部接口的設(shè)備?你可以下載我們CH341EVT的資料包,里面有所有的評(píng)估程序和代碼http://www.findthetime.net/downloads.php?name=pro&proid=60


我已經(jīng)連上設(shè)備了,顯示有usb設(shè)備連入,虛擬的串口也可以用的 只不過dll文件是我另外找的,不是驅(qū)動(dòng)里的,驅(qū)動(dòng)帶的dll是個(gè)特別小的CH341PT.DLL,只有6.55k,里面好像沒有直接讀寫的api,只有判斷串口是否來自341芯片以及事件通知。我這邊的軟件在usb斷開時(shí)串口會(huì)消失引發(fā)錯(cuò)誤,所以希望可以用api直接讀寫,就在網(wǎng)上找了一個(gè)ch341dll.dll,里面標(biāo)注了幾個(gè)可以給串口用的api,其中CH341OpenDevice這種應(yīng)該是可以用的 不過這個(gè)好像就是evt資料包里并口的那個(gè)CH341DLL.BAS編譯的dll,我看dll提供的函數(shù)和bas文件里寫的是一樣的。是不是要改裝別的版本驅(qū)動(dòng)才行?


現(xiàn)在正在用的驅(qū)動(dòng)信息: ; CH341SER.INF ; Driver for CH341 (USB=>SERIAL chip) V3.3 ; WDM&VXD for Windows 98/Me/2000/XP/Server2003/Vista/64bit Vista/Server2008/Win7/64bit Win7 ; Copyright (C) W.ch 2001-2011 ;

[Version] Signature = "$Chicago$" Class = ;Ports ClassGuid = {4D36E978-E325-11CE-BFC1-08002BE10318} Provider = %WinChipHead% DriverVer = 11/04/2011, 3.3.2011.11 CatalogFile.NT = CH341SER.CAT


CH341DLL.dll是操作并口模式CH341的庫文件,操作不了轉(zhuǎn)異步串口模式的341的。 你現(xiàn)在還是在插拔通知里面把串口操作處理一下,把報(bào)錯(cuò)的問題解決。


我試試吧。拔下來之后timer讀不到數(shù)據(jù),我的程序都按常理關(guān)串口dispose了,但是代碼段以外的部分會(huì)報(bào)錯(cuò),不知道是哪的問題,我去試試根據(jù)通知來處理串口,看看更迅速的應(yīng)對(duì)能不能回避問題╮(╯▽╰)╭


Declare Function CH341PtSetDevNotify Lib "CH341PT.DLL" (ByVal iDeviceID As String, ByVal iNotifyRoutine As long) As Boolean ' 指定端口設(shè)備事件回調(diào)程序,為NULL則取消事件通知,否則在檢測到事件時(shí)調(diào)用該程序 ' CH341PtSetDevNotify 設(shè)定端口設(shè)備事件通知程序 ' iDeviceID, 可選參數(shù),指向以\0終止的字符串,指定被監(jiān)控的設(shè)備的ID或者不含序號(hào)的主名稱,對(duì)于串口該參數(shù)必須為NULL或者"COM" ' iNotifyRoutine 指定端口設(shè)備事件回調(diào)程序,為NULL則取消事件通知,否則在檢測到事件時(shí)調(diào)用該程序

這個(gè)iNotifyRoutine是個(gè)啥啊,寫個(gè)函數(shù)然后怎么指定?這個(gè)long類型是句柄還是啥...


iNotifyRoutine是一個(gè)函數(shù)的地址,當(dāng)有設(shè)備插拔時(shí),就會(huì)根據(jù)這個(gè)函數(shù)的入口地址來調(diào)用這個(gè)函數(shù)。


雅蠛蝶,vb.net的垃圾回收機(jī)制在回收因?yàn)榘纬鍪录U棄的串口時(shí)總是出錯(cuò),明明已經(jīng)重新打開并且廢棄緩沖區(qū)后再關(guān)閉dispose重新初始化了,我已經(jīng)實(shí)在無語了,求個(gè)用api操作串口模式下芯片的方法,有什么適用串口模式芯片還能直接用api讀寫數(shù)據(jù)的dll么..... vb.net下addressof只能返回給delegate不能返回int32型地址,也有點(diǎn)蛋疼....


看來可能是vb.net的串口控件太敏感,mscomm控件則遲鈍的恰到好處,換用mscomm吧,感謝耐心解答


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频