免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

CR95HF DLL兼容性問題排查:從加載失敗到穩(wěn)定部署實(shí)踐

CR95HF DLL兼容性問題排查:從加載失敗到穩(wěn)定部署實(shí)踐 1. 問題背景與典型現(xiàn)象1.1 先說說CR95HF是什么CR95HF是意法半導(dǎo)體ST推出的一款多協(xié)議非接觸式收發(fā)器芯片支持ISO/IEC 14443 A/B、ISO/IEC 15693以及ISO/IEC 18092等主流NFC/RFID協(xié)議。在很多NFC讀寫器方案里它扮演的是“射頻前端協(xié)議?!钡慕巧鳈C(jī)通過SPI或UART給它發(fā)命令幀它負(fù)責(zé)把命令調(diào)制成射頻信號(hào)再把卡片返回的數(shù)據(jù)解調(diào)回傳給主機(jī)。我之前做過一個(gè)基于CR95HF的門禁讀卡器項(xiàng)目PC端上位機(jī)需要通過USB轉(zhuǎn)SPI比如FT232H這類橋接芯片和CR95HF通信。ST官方提供了一個(gè)PC端的DLL封裝庫用來屏蔽底層SPI通信細(xì)節(jié)應(yīng)用層只需要調(diào)用幾個(gè)API就可以實(shí)現(xiàn)尋卡、防碰撞、讀寫塊等操作。聽起來很省事對(duì)吧但實(shí)際調(diào)試起來DLL兼容性問題能把人折磨到懷疑人生。1.2 “DLL compatibility issue”到底長(zhǎng)什么樣結(jié)合標(biāo)題里的關(guān)鍵詞和網(wǎng)上大量同類問題反饋CR95HF DLL兼容性問題在實(shí)操中通常表現(xiàn)為這幾種形態(tài)第一DLL加載失敗。程序一啟動(dòng)就彈窗“無法定位程序輸入點(diǎn)”或者“動(dòng)態(tài)鏈接庫(DLL)初始化例程失敗”對(duì)應(yīng)Windows錯(cuò)誤碼1114ERROR_DLL_INIT_FAILED。這個(gè)問題在調(diào)用CR95HF.DLL時(shí)特別常見因?yàn)楣俜紻LL內(nèi)部依賴了某些運(yùn)行時(shí)組件一旦初始化階段出錯(cuò)整個(gè)DLL就廢了。第二DLL能加載但函數(shù)調(diào)用就崩潰。寫一個(gè)最簡(jiǎn)單的OpenPort測(cè)試程序編譯通過運(yùn)行也不報(bào)缺DLL但一調(diào)API就閃退或者返回值永遠(yuǎn)是錯(cuò)誤碼。這種情況往往是調(diào)用約定calling convention不匹配或者參數(shù)類型聲明錯(cuò)了。第三32位/64位架構(gòu)不匹配。這是最隱蔽的一類。CR95HF官方DLL有x86和x64兩個(gè)版本如果你在64位系統(tǒng)上裝了64位DLL但應(yīng)用程序是32位的系統(tǒng)根本不會(huì)去加載64位DLL這時(shí)候會(huì)報(bào)“模塊找不到”或者“不是有效的Win32應(yīng)用程序”。第四DLL依賴鏈斷裂。CR95HF.DLL本身不是孤立的它內(nèi)部還依賴了FTDI的驅(qū)動(dòng)庫如果走FT232H方案、微軟的VC運(yùn)行庫、甚至C運(yùn)行時(shí)msvcr100.dll / msvcp100.dll系列。任何一個(gè)依賴項(xiàng)缺失或者版本不對(duì)都會(huì)導(dǎo)致加載失敗。我自己踩過的坑是在Win10 64位專業(yè)版上用Visual Studio 2019編譯了32位Release版測(cè)試程序DLL文件也放在exe同目錄了但一運(yùn)行就報(bào)“系統(tǒng)無法執(zhí)行指定的程序”。折騰了一下午最后發(fā)現(xiàn)是CR95HF.DLL依賴的FTD2XX.dll版本太老而系統(tǒng)里新裝的FTDI驅(qū)動(dòng)是64位版本32位程序根本找不到對(duì)應(yīng)的32位FTD2XX.dll于是整個(gè)加載鏈路就斷了。如果你還沒遇到這些問題只是提前搜索那么恭喜你看完這篇文章能省下大量排錯(cuò)時(shí)間。2. 為什么CR95HF的DLL會(huì)這么容易出兼容性問題2.1 官方DLL的設(shè)計(jì)架構(gòu)與依賴鏈先了解CR95HF官方DLL的內(nèi)部結(jié)構(gòu)這是定位問題的前提。ST提供的DLL名字通常叫“CR95HF-DLL”版本隨芯片固件一起發(fā)布核心功能是封裝SPI通信時(shí)序和命令幀構(gòu)造。它的內(nèi)部依賴鏈大致是應(yīng)用層 → CR95HF.dll → FTD2XX.dllFTDI USB轉(zhuǎn)SPI驅(qū)動(dòng)庫→ 操作系統(tǒng)USB驅(qū)動(dòng)棧 → 硬件。這條鏈路上任何一環(huán)出問題最終表現(xiàn)出來都是CR95HF.DLL相關(guān)的兼容性錯(cuò)誤。我用Dependencies工具一個(gè)開源替代Dependency Walker的工具打開CR95HF.dll看到的依賴項(xiàng)里明確列出了FTD2XX.dll、KERNEL32.dll、USER32.dll、msvcrt.dll這幾個(gè)。其中FTD2XX.dll是最大的變數(shù)因?yàn)樗荈TDI公司發(fā)布的動(dòng)態(tài)庫版本非常多而且FTDI官方安裝包還會(huì)自動(dòng)更新它。如果你電腦上先裝了FTDI最新驅(qū)動(dòng)再裝ST官方開發(fā)包ST包里的舊版FTD2XX.dll可能會(huì)被覆蓋也可能反過來覆蓋了新版導(dǎo)致版本錯(cuò)亂。另外CR95HF.DLL初始化失敗WinError 1114的核心機(jī)制是Windows加載DLL時(shí)會(huì)先執(zhí)行DLL的入口函數(shù)DllMain。在DllMain里它會(huì)嘗試加載依賴的庫如果任何一個(gè)依賴庫初始化失敗或者版本不兼容導(dǎo)致某個(gè)導(dǎo)出函數(shù)解析失敗DllMain就返回FALSEWindows隨即拋出ERROR_DLL_INIT_FAILED。這就是為什么很多人明明把DLL放在exe同目錄了還報(bào)1114錯(cuò)誤的根本原因——不是缺文件而是依賴項(xiàng)初始化掛掉了。2.2 32位與64位架構(gòu)錯(cuò)配的坑Windows下32位程序和64位程序是兩套獨(dú)立的運(yùn)行環(huán)境系統(tǒng)目錄、注冊(cè)表、DLL加載路徑完全隔離。CR95HF官方DLL在安裝包里有區(qū)分x86和x64版本在“C:\Program Files (x86)\STMicroelectronics\CR95HF”這類路徑下通常能看到兩個(gè)子目錄。但很多新手容易犯的錯(cuò)誤是用64位的Python解釋器跑ctypes卻加載了32位的CR95HF.DLL報(bào)錯(cuò)信息可能不是“不是有效的Win32應(yīng)用程序”而是更迷惑的“找不到指定的模塊”錯(cuò)誤碼126。這里有個(gè)Windows加載規(guī)則需要記住進(jìn)程是32位時(shí)加載DLL會(huì)去“C:\Windows\SysWOW64”找系統(tǒng)庫進(jìn)程是64位時(shí)才去“C:\Windows\System32”。但LoadLibrary搜索路徑的優(yōu)先級(jí)是先看應(yīng)用程序目錄再看系統(tǒng)目錄。如果你的應(yīng)用程序目錄里同時(shí)存在32位和64位DLL文件同名不同架構(gòu)Windows不會(huì)幫你“自動(dòng)選擇匹配的版本”它只會(huì)按搜索順序找到第一個(gè)就直接加載。架構(gòu)不匹配時(shí)加載會(huì)失敗但它不會(huì)繼續(xù)去搜另一個(gè)版本。所以一個(gè)很實(shí)用的建議是建立獨(dú)立的DLL存放目錄讓每個(gè)項(xiàng)目只放對(duì)應(yīng)架構(gòu)的DLL文件不要圖省事把所有版本都堆在一起。我在實(shí)際開發(fā)中會(huì)把x86和x64分成兩個(gè)子目錄用環(huán)境變量或者構(gòu)建腳本來切換這樣既清晰又不容易踩坑。2.3 調(diào)用約定與函數(shù)導(dǎo)出名的隱性問題CR95HF.DLL的API函數(shù)采用了標(biāo)準(zhǔn)C風(fēng)格的導(dǎo)出方式函數(shù)名沒有做裝飾name decoration。這意味著在C#里用DllImport導(dǎo)入時(shí)EntryPoint必須精確匹配DLL里的導(dǎo)出名在C里用隱式鏈接時(shí)需要一個(gè)合適的.lib文件如果用LoadLibrary GetProcAddress動(dòng)態(tài)加載還得注意函數(shù)的調(diào)用約定是__cdecl還是__stdcall。ST官方在CR95HF_DLL用戶手冊(cè)里給出的函數(shù)原型是int CR95HF_OpenPort(char* pPortName); int CR95HF_ClosePort(void); int CR95HF_Reset(void); int CR95HF_Transmit(unsigned char* pucData, unsigned char ucDataLength, unsigned char bWaitForReply, unsigned char* pucReply, unsigned char* pucReplyLength);默認(rèn)調(diào)用約定是__cdeclC調(diào)用約定。但如果你在C#里用DllImport默認(rèn)的CallingConvention是Winapi實(shí)際落到__stdcall這就造成了“函數(shù)調(diào)用參數(shù)棧不平衡”的問題輕則返回垃圾值重則在Debug下觸發(fā)運(yùn)行時(shí)檢查失敗。我在網(wǎng)上搜到過不少帖子問“為什么C#調(diào)用CR95HF_OpenPort返回0但打開串口失敗”多半就是這個(gè)原因?qū)е碌?。解決方法是顯式指定CallingConvention[DllImport(CR95HF.dll, CallingConvention CallingConvention.Cdecl)] public static extern int CR95HF_OpenPort(string pPortName);還有一種情況是DLL文件版本更新后某些API函數(shù)被重命名了比如舊版本是CR95HF_Open新版本改成CR95HF_OpenPort如果你的程序編譯時(shí)用的是舊版.lib運(yùn)行時(shí)卻加載了新版DLL就會(huì)報(bào)“無法定位程序輸入點(diǎn)”。這種問題在ST官方更新DLL后非常常見排查時(shí)需要確認(rèn)DLL版本和頭文件版本是否一致。3. 系統(tǒng)化排查流程與實(shí)操步驟3.1 第一步確認(rèn)你的軟硬件環(huán)境基線排錯(cuò)最忌諱上來就亂試。先列出你的環(huán)境基線我每次做NFC讀寫器上位機(jī)調(diào)試時(shí)都會(huì)先確認(rèn)下面這張表項(xiàng)目檢查內(nèi)容推薦配置操作系統(tǒng)32位還是64位Win10/11 64位應(yīng)用架構(gòu)編譯出來的程序是x86還是x64與操作系統(tǒng)一致或明確選x86CR95HF DLL版本官方安裝包里的版本號(hào)建議用最新版并記錄MD5依賴庫版本FTD2XX.dll版本與FTDI驅(qū)動(dòng)匹配上位機(jī)語言C/C/C#/Python任選但加載方式不同接口方式SPI還是UART與DLL內(nèi)的傳輸層匹配這里有一個(gè)容易被忽略的點(diǎn)CR95HF-DLL內(nèi)置的傳輸層是固定的。第一代官方DLL只支持通過FTDI芯片走SPI第二代開始加入了UART支持通過FTDI的UART模式或者直接接串口芯片。如果你手里的DLL版本是只支持SPI的而你硬件上是UART連接那DLL也能加載成功但OpenPort會(huì)一直返回錯(cuò)誤。這個(gè)不是“兼容性問題”而是“功能不匹配”排查時(shí)要區(qū)分開。3.2 第二步用命令行工具快速驗(yàn)證DLL本身是否健康很多人一遇到DLL報(bào)錯(cuò)就去找各種“修復(fù)工具”這其實(shí)是很大的誤區(qū)。DLL修復(fù)工具大多是整理系統(tǒng)級(jí)DLL的對(duì)于CR95HF這種特定廠商的DLL它們幾乎幫不上忙。正確做法是用命令行工具直接檢查DLL的依賴和導(dǎo)出表。Windows自帶的where命令可以確認(rèn)DLL到底被搜到了哪個(gè)路徑where /R C:\ CR95HF.dll也可以用小工具DependenciesGitHub開源支持現(xiàn)代Windows拖入CR95HF.dll就能看到它的依賴項(xiàng)、導(dǎo)出函數(shù)、以及每個(gè)依賴是否被解析到。比如它會(huì)把FTD2XX.dll標(biāo)記為紅色說明在搜索路徑里找不到這個(gè)依賴這就直接定位了問題。還可以用Visual Studio自帶的dumpbin工具看導(dǎo)出符號(hào)dumpbin /exports CR95HF.dll輸出里會(huì)列出所有導(dǎo)出的函數(shù)名和序號(hào)。如果里面看不到CR95HF_OpenPort這種函數(shù)說明這個(gè)DLL文件本身不對(duì)可能是被精簡(jiǎn)過的、或者是芯片原廠內(nèi)部用的版本不是完整的發(fā)布版。3.3 第三步用最小測(cè)試程序復(fù)現(xiàn)問題我強(qiáng)烈建議在寫正式業(yè)務(wù)代碼前先弄一個(gè)“最小可復(fù)現(xiàn)工程”把所有變量降到最低。以C為例用動(dòng)態(tài)加載的方式寫一個(gè)5分鐘就能跑通的測(cè)試#include windows.h #include cstdio typedef int (*CR95HF_OpenPortFn)(char*); int main() { HMODULE hDll LoadLibraryA(CR95HF.dll); if (!hDll) { DWORD err GetLastError(); printf(LoadLibrary failed, error %lu\n, err); return -1; } CR95HF_OpenPortFn openPort (CR95HF_OpenPortFn)GetProcAddress(hDll, CR95HF_OpenPort); if (!openPort) { DWORD err GetLastError(); printf(GetProcAddress failed, error %lu\n, err); FreeLibrary(hDll); return -2; } char portName[32] COM4; int ret openPort(portName); printf(CR95HF_OpenPort returned %d\n, ret); FreeLibrary(hDll); return 0; }這個(gè)測(cè)試能精確區(qū)分問題發(fā)生在“加載階段”還是“調(diào)用階段”。如果LoadLibrary就返回NULL那就是DLL加載失敗繼續(xù)按依賴項(xiàng)排查如果LoadLibrary成功但GetProcAddress失敗說明DLL里沒有導(dǎo)出這個(gè)函數(shù)檢查DLL版本如果都成功了但openPort返回值異常那就是調(diào)用約定或參數(shù)類型的問題。我把這套測(cè)試方法寫進(jìn)團(tuán)隊(duì)內(nèi)部知識(shí)庫后后面每個(gè)新成員接手CR95HF項(xiàng)目都能在10分鐘內(nèi)定位到自己的問題出在哪一層而不是反復(fù)百度“dll初始化例程失敗”。3.4 第四步處理WinError 1114的幾個(gè)固定思路如果你的LoadLibrary直接報(bào)錯(cuò)1114ERROR_DLL_INIT_FAILED通??梢园聪旅鎺讞l路徑依次排查用Dependencies工具檢查依賴項(xiàng)是否全部解析成功。重點(diǎn)關(guān)注FTD2XX.dll、MSVCRT.dll、KERNEL32.dll。如果FTD2XX.dll顯示缺失那就是FTDI驅(qū)動(dòng)庫的問題。解決辦法是安裝FTDI官方最新的CDM驅(qū)動(dòng)包并確保安裝路徑通常是“C:\Windows\System32”或“C:\Windows\SysWOW64”按架構(gòu)對(duì)應(yīng)里有正確的FTD2XX.dll。檢查VC運(yùn)行庫是否齊全。CR95HF.DLL如果是用較舊的Visual Studio版本編譯的可能依賴VC2010、VC2013等運(yùn)行庫。裝一個(gè)“Microsoft Visual C Redistributable最新支持版合集”可以覆蓋絕大多數(shù)情況。這個(gè)在微軟官網(wǎng)就能下建議把2015到2022的x86和x64版本都裝一遍成本低收益高。查看Windows事件日志。WinR輸入eventvwr.msc在“Windows日志 → 應(yīng)用程序”里找Error級(jí)別的條目來源是“Application Error”或“Windows Error Reporting”。事件詳情里會(huì)寫清楚是哪個(gè)模塊導(dǎo)致DLL初始化失敗有時(shí)候能直接看到“CR95HF.dll”在初始化時(shí)加載“某缺失文件名”失敗。把所有DLL和exe放到同一目錄。這聽起來很基礎(chǔ)但真的有很多人忽略。Windows加載DLL的搜索順序第一個(gè)就是應(yīng)用程序目錄如果沒開啟SafeDllSearchMode把CR95HF.dll和FTD2XX.dll和exe放一起是最穩(wěn)妥的不要依賴系統(tǒng)PATH。3.5 第五步Python環(huán)境下特殊的坑因?yàn)闊嵩~里出現(xiàn)了大量Python調(diào)用DLL報(bào)1114錯(cuò)誤的記錄這里單獨(dú)說一下。Python中使用ctypes加載CR95HF.DLL常見的錯(cuò)誤是import ctypes dll ctypes.CDLL(rC:\path\to\CR95HF.dll) # 報(bào)錯(cuò)OSError: [WinError 1114] 動(dòng)態(tài)鏈接庫(DLL)初始化例程失敗這個(gè)錯(cuò)誤在Python里出現(xiàn)本質(zhì)上和C里L(fēng)oadLibrary失敗是同一回事——DLL初始化階段掛了。但Python還有一個(gè)特殊之處Python解釋器本身的位數(shù)決定了加載DLL的位數(shù)。如果你用的是64位Python加載32位DLL會(huì)報(bào)“不是有效的Win32應(yīng)用程序”如果你用的是32位Python加載64位DLL也會(huì)報(bào)同樣的錯(cuò)。CR95HF官方DLL如果只提供了32位版本那你就必須用32位Python。判斷Python位數(shù)很簡(jiǎn)單python -c import platform; print(platform.architecture())輸出是(64bit, WindowsPE)就是64位是(32bit, WindowsPE)就是32位。另外ctypes加載DLL時(shí)如果DLL的初始化例程里依賴了某個(gè)不需要的組件比如某些DLL在DllMain里嘗試創(chuàng)建設(shè)備句柄設(shè)備沒連接就會(huì)初始化失敗這時(shí)候就算所有依賴項(xiàng)都齊全DLL也會(huì)加載失敗。CR95HF官方DLL在計(jì)算機(jī)休眠后重新喚醒時(shí)偶爾會(huì)出現(xiàn)這個(gè)問題因?yàn)榈讓覨TDI句柄已經(jīng)失效DllMain里做了清理操作反而報(bào)錯(cuò)。這時(shí)候最簡(jiǎn)單的處理方式是重啟程序或者徹底拔出USB設(shè)備重新插入。4. 從“能用”到“用得穩(wěn)”長(zhǎng)期方案與經(jīng)驗(yàn)總結(jié)4.1 不要用“DLL修復(fù)工具”解決廠商DLL問題網(wǎng)絡(luò)熱詞里大量出現(xiàn)“dll修復(fù)工具”“免費(fèi)dll修復(fù)”“電腦自帶dll修復(fù)在哪里”這類詞我必須提醒一句這些工具對(duì)CR95HF這種特定廠商DLL的兼容性問題基本沒有幫助。系統(tǒng)級(jí)DLL修復(fù)工具比如DISM、SFC能修復(fù)的是Windows自帶的系統(tǒng)DLL比如kernel32.dll、user32.dll這種。CR95HF.dll是第三方廠商發(fā)布的應(yīng)用級(jí)DLL修復(fù)工具不可能知道它應(yīng)該依賴哪個(gè)版本的FTD2XX.dll更不可能幫你修復(fù)“調(diào)用約定不匹配”這種邏輯層面的問題。我見過不少同行在遇到CR95HF報(bào)錯(cuò)時(shí)第一反應(yīng)是下載各種“DLL修復(fù)工具”結(jié)果折騰一整天也沒解決最后用Dependencies一看就是FTD2XX.dll版本不對(duì)。正確姿勢(shì)永遠(yuǎn)是先查依賴鏈再查架構(gòu)匹配最后查代碼層調(diào)用。4.2 自建一套輕量級(jí)DLL封裝層為了讓業(yè)務(wù)代碼不直接依賴CR95HF.DLL的脆弱加載邏輯我后來做了一個(gè)很輕量的封裝層。核心思路是程序啟動(dòng)時(shí)不立即加載CR95HF.DLL而是延遲到真正需要打開讀卡器時(shí)才加載同時(shí)把每次調(diào)用都包在try/catch里加載失敗時(shí)給出明確的錯(cuò)誤提示缺哪個(gè)依賴、建議怎么解決。這個(gè)封裝層在C#里實(shí)現(xiàn)很直觀public class Cr95hfDllLoader { private IntPtr _dllHandle; public bool TryLoad(string dllPath) { _dllHandle NativeMethods.LoadLibrary(dllPath); if (_dllHandle IntPtr.Zero) { int errorCode Marshal.GetLastWin32Error(); string message errorCode switch { 126 模塊未找到請(qǐng)檢查CR95HF.dll及其依賴項(xiàng)是否完整, 127 函數(shù)入口點(diǎn)未找到請(qǐng)檢查DLL版本是否與程序匹配, 1114 DLL初始化例程失敗請(qǐng)檢查VC運(yùn)行庫和FTDI驅(qū)動(dòng), _ $DLL加載失敗錯(cuò)誤碼{errorCode} }; throw new InvalidOperationException(message); } // 用GetProcAddress解析所有函數(shù)指針 return true; } }這樣用戶看到的不是“應(yīng)用程序錯(cuò)誤”的彈窗而是能直接定位問題的中文提示。對(duì)產(chǎn)線部署和維護(hù)來說這個(gè)體驗(yàn)提升是巨大的。4.3 關(guān)于版本凍結(jié)與更新策略CR95HF的DLL屬于嵌入式上位機(jī)工具鏈的一部分我個(gè)人的建議是不追求最新只追求固定。一旦你驗(yàn)證某個(gè)版本的CR95HF.DLL配合特定版本的FTD2XX.dll能穩(wěn)定工作就把這兩個(gè)文件連同版本號(hào)、MD5值一起提交到項(xiàng)目倉庫里并寫好部署文檔。不要隨意升級(jí)FTDI驅(qū)動(dòng)庫因?yàn)镕TDI的新驅(qū)動(dòng)往往是為他們自己的新芯片設(shè)計(jì)的對(duì)老芯片的兼容性不一定更好。我遇到過最典型的案例是FTDI發(fā)布了新的驅(qū)動(dòng)版本客戶電腦自動(dòng)更新后原本穩(wěn)定的CR95HF讀卡器程序直接打不開一查就是新的FTD2XX.dll改了內(nèi)部接口導(dǎo)致CR95HF.DLL初始化失敗。最后我們給客戶的解決方案很“原始”——把舊版FTD2XX.dll回滾回去問題立刻消失。這個(gè)案例說明嵌入式工具鏈的穩(wěn)定性往往不取決于“用最新的”而在于“鎖死經(jīng)過驗(yàn)證的版本組合”。這和Web開發(fā)里鎖package.json版本是同一個(gè)邏輯。4.4 排查工具清單與問題速查表這里總結(jié)一張CR95HF DLL兼容性問題的速查表我實(shí)際排查時(shí)都是對(duì)著這個(gè)表逐項(xiàng)過的錯(cuò)誤碼/現(xiàn)象可能原因解決動(dòng)作126 找不到指定模塊依賴項(xiàng)缺失通常是FTD2XX.dll安裝FTDI驅(qū)動(dòng)包確認(rèn)依賴項(xiàng)127 找不到指定程序入口點(diǎn)DLL版本與編譯時(shí)的.lib版本不一致替換為編譯時(shí)對(duì)應(yīng)的DLL版本1114 DLL初始化例程失敗依賴項(xiàng)初始化失敗或設(shè)備狀態(tài)異常檢查VC運(yùn)行庫重啟設(shè)備193 不是有效的Win32應(yīng)用程序架構(gòu)不匹配檢查exe與DLL的32/64位一致性LoadLibrary成功但函數(shù)調(diào)用返回異常值調(diào)用約定不匹配確認(rèn)__cdecl/__stdcall并顯式指定OpenPort返回錯(cuò)誤碼但DLL加載正常硬件連接方式與DLL內(nèi)置傳輸層不一致確認(rèn)使用的DLL版本支持SPI還是UART排查工具方面我常用的就是這幾個(gè)Dependencies開源檢查DLL依賴樹替代老舊的Dependency Walkerdumpbin /exportsVS自帶看導(dǎo)出函數(shù)Process ExplorerSysinternals出品運(yùn)行時(shí)查看進(jìn)程加載了哪些DLL模塊gflags / htrace如果需要深度調(diào)試DLL加載行為可以用Windows的加載器追蹤功能4.5 和其他廠商N(yùn)FC芯片DLL的對(duì)比如果橫向?qū)Ρ萅XP的NFC讀卡器方案比如RC522、PN532會(huì)發(fā)現(xiàn)ST的CR95HF DLL兼容性問題不算極端但確實(shí)比同類產(chǎn)品多一些“陷阱”。RC522大多是SPI直連MCUPC端很少用官方DLLPN532有HSU/I2C/SPI多種接口官方庫通常做成跨平臺(tái)的lib庫相對(duì)清爽。CR95HF的問題在于它的PC端生態(tài)相對(duì)小眾ST更新維護(hù)的頻率也一般導(dǎo)致很多細(xì)節(jié)只能靠社區(qū)沉淀。這就意味著如果你選擇CR95HF做產(chǎn)品方案最好在項(xiàng)目早期就把DLL兼容性測(cè)試納入到研發(fā)流程里。不要等到產(chǎn)品交付了才發(fā)現(xiàn)客戶現(xiàn)場(chǎng)有一半電腦跑不起來。我在幫客戶做方案選型時(shí)會(huì)建議他們做一張“目標(biāo)電腦環(huán)境兼容性測(cè)試矩陣”覆蓋Win10 32位、Win10 64位、Win11、有無FTDI驅(qū)動(dòng)等組合趁早發(fā)現(xiàn)風(fēng)險(xiǎn)。5. 幾個(gè)容易忽視的實(shí)操細(xì)節(jié)5.1 串口和SPI的混用問題CR95HF-DLL內(nèi)部實(shí)現(xiàn)了一個(gè)“端口抽象層”有的版本同時(shí)支持“COM口方式”和“SPI方式”靠OpenPort傳入的字符串來區(qū)分。如果你傳的是“COM4”DLL會(huì)按串口解析如果傳的是“SPI0”DLL會(huì)按FTDI SPI方式解析。但不同版本的DLL對(duì)這個(gè)字符串的格式要求并不完全一致。有些版本要求傳入“\\.\COM4”這種帶設(shè)備命名空間的格式有些版本只要“COM4”就行。這個(gè)細(xì)節(jié)寫進(jìn)代碼里很容易被忽略但一旦DLL升級(jí)就可能導(dǎo)致“為什么換了DLL后OpenPort一直失敗”的經(jīng)典問題。我的習(xí)慣是在封裝層里做一次端口字符串標(biāo)準(zhǔn)化統(tǒng)一轉(zhuǎn)成“\\.\COMx”格式避免底層DLL版本差異影響上層調(diào)用。5.2 CRT堆不一致導(dǎo)致的內(nèi)存崩潰老版本CR95HF.DLL是用VC6或VC2008編譯的跑在Win10/11上如果你的應(yīng)用程序用的是新版Visual Studio比如VS2019/2022兩邊可能各自鏈接了不同版本的C運(yùn)行時(shí)庫。DLL內(nèi)部分配了內(nèi)存然后在EXE里釋放或者反過來會(huì)觸發(fā)“堆損壞”或隨機(jī)崩潰。雖然CR95HF的API設(shè)計(jì)上沒有要求調(diào)用者負(fù)責(zé)釋放DLL內(nèi)部?jī)?nèi)存的情況但在某些版本的例程代碼里確實(shí)存在調(diào)用方自己malloc一個(gè)緩沖區(qū)傳給DLL的情況DLL內(nèi)部不負(fù)責(zé)釋放但會(huì)越界寫。這種問題在Debug下可能一切正常在Release下就隨機(jī)崩。排查思路是在所有API調(diào)用的前后檢查內(nèi)存使用量是否異?;蛘哂肁pplication Verifier工具做一次全面的堆檢查。如果確認(rèn)是DLL版本太老導(dǎo)致的只能升級(jí)DLL版本或者換用更新的芯片方案。5.3 多線程環(huán)境下的串行化CR95HF-DLL在內(nèi)部沒有做線程安全保護(hù)官方文檔里也說明了這一點(diǎn)。如果你的上位機(jī)用了多線程比如一個(gè)線程輪詢尋卡另一個(gè)線程處理UI事件兩個(gè)線程同時(shí)調(diào)用CR95HF API輕則返回錯(cuò)誤重則導(dǎo)致DLL內(nèi)部狀態(tài)機(jī)錯(cuò)亂后續(xù)所有命令都失敗。解決方式是在應(yīng)用層加一個(gè)互斥鎖把DLL的所有調(diào)用串行化private readonly object _cr95hfLock new object(); public int SafeOpenPort(string portName) { lock (_cr95hfLock) { return NativeMethods.CR95HF_OpenPort(portName); } }這個(gè)細(xì)節(jié)在短時(shí)間測(cè)試時(shí)體現(xiàn)不出來但跑連續(xù)尋卡7x24小時(shí)的老化測(cè)試時(shí)線程安全問題一定會(huì)暴露。我們項(xiàng)目里第一次做耐久測(cè)試跑了6小時(shí)候出現(xiàn)卡死加鎖之后連續(xù)跑48小時(shí)都沒問題。5.4 靜電與熱插拔對(duì)DLL句柄的影響最后說一個(gè)硬件層面影響DLL的問題。CR95HF通過FTDI芯片連接USB熱插拔時(shí)Windows會(huì)卸載設(shè)備導(dǎo)致FTDI句柄失效。此時(shí)CR95HF.DLL內(nèi)部的設(shè)備句柄沒有自動(dòng)重連機(jī)制你再調(diào)API返回的就是“設(shè)備不存在”之類的錯(cuò)誤。如果程序沒有做句柄失效檢測(cè)用戶看到的可能就是“DLL初始化失敗”的提示。解決建議是在OpenPort之后周期性地調(diào)用一個(gè)輕量級(jí)API比如CR95HF_GetFirmwareVersion來探測(cè)設(shè)備是否在線如果連續(xù)幾次失敗就主動(dòng)調(diào)用CR95HF_ClosePort并提示用戶重新插拔設(shè)備。這個(gè)探測(cè)機(jī)制我放在了一個(gè)后臺(tái)定時(shí)器里效果很好。6. 寫在最后的個(gè)人經(jīng)驗(yàn)CR95HF的DLL兼容性問題說到底不是一個(gè)“修一下就好”的bug而是一整套環(huán)境治理問題。它牽涉到Windows DLL加載機(jī)制、32/64位架構(gòu)隔離、第三方驅(qū)動(dòng)依賴、編譯工具鏈差異等多層因素。遇到問題時(shí)不要迷信什么“一鍵修復(fù)工具”老老實(shí)實(shí)按“依賴檢查 → 架構(gòu)核對(duì) → 最小復(fù)現(xiàn) → 代碼審查”的套路來基本都能定位到根因。我個(gè)人踩過最大的坑就是沒有盡早驗(yàn)證“目標(biāo)環(huán)境的FTDI驅(qū)動(dòng)版本”導(dǎo)致交付前一天才發(fā)現(xiàn)客戶機(jī)器上的新版驅(qū)動(dòng)和CR95HF.DLL不兼容。后來我把“DLL版本鎖死 依賴項(xiàng)自動(dòng)化檢查”寫進(jìn)了交付checklist之后再?zèng)]因?yàn)檫@個(gè)問題翻過車。最后再分享一個(gè)小技巧在項(xiàng)目倉庫里放一個(gè)environment_check.bat腳本自動(dòng)檢查exe位數(shù)、DLL位數(shù)、FTD2XX.dll是否存在、系統(tǒng)VC運(yùn)行庫是否安裝。讓任何拿到代碼的同事或客戶先跑一遍這個(gè)腳本再?zèng)Q定要不要找你看問題。這一招真的能幫你省下大量重復(fù)溝通的時(shí)間也適合在其他依賴原生DLL的項(xiàng)目里復(fù)用。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久热网在线视频| 来吧亚洲综合网| 婷婷五月丁香综合激情| 日韩ww| 激情五月天小说视频| 激情五月综合久久| 色婷婷影视99| 无码日本精品XXXXXXXXX | 婷婷五月图片小说视频| 亚洲天天免费| 这里只有精品亚洲| 97婷婷久久丁香| 亚洲无码播放| 婷婷操久久| Jh7Uf088VHafNm| 乱码操操| 丁香五月日韩| 激情综合网五月| 日本不卡高字幕在线2019| 婷婷成人五月天| 99在线观看视频精品| 九色地址91视频| 风流少妇A片一区二区蜜桃| 五月婷婷中文字幕| 亚洲天堂aaa| 天天狠狠婷婷在线| 国产激情综合| 色婷婷导航| 丁香五月婷婷操逼| 六月婷婷天堂| www。五月,com| 狠狠色色| 丁香九月婷婷| 免费无码毛片一区二区A片| 99热新网址| 九九精品视频在线6| 五月婷婷激情四季| 婷婷丁香六月影视| 五月丁香六月婷婷免费| 狠狠色丁婷婷日日,伊人激情综合网| 久久精品63| 久久天堂女人| 99日本视频| 久草x色在线观看99 | www.天天色综合| 精品九九网| 欧美成人精品A片免费一区99| 日韩一级网站| 色欲天天综合| 婷婷五月天伊人网| 日本高清久久| 成人片黄网站色大片免费毛片| 大香蕉啪啪啪| 丁香五月大香蕉| 夜夜骑天天操| 久久五月天婷婷| 99思思| 欧美丁香五月天| 久久久婷丁香五月| 成人五月天视频播放| 99热最新网址| 日本狠狠网| 99在线精品免费视频| 久草xx性爱视频| 六月丁香五月激情网| 五月丁香好婷婷姑娘综合网| 天天狠狠色| 色婷婷狠狠色| 日本色五月| www.五月瑟| 五月天电影网| 色五月婷婷91| 激情综合五月婷婷| 久热精彩视频98| 操逼综合激情网| wwww.色婷婷| AV大片在线观看| 日本A片一区| 伊人大香蕉综合在线| 婷婷五月超碰| 99色婷婷视频| 丁香五月中文字幕久色| 97热这里精品在线视频| 婷婷五月色| 综合aV在线| 丁香激情综合| 婷婷五月花| 激情深爱婷婷网| 色婷婷4| 亚洲 无码 中文字幕 中出 | 五月天婷婷涩涩| 97碰在线免费观看| 五月丁香五月丁香| 99视频在线观看网址| 9久热在线视频精品| 色色五月天婷婷| 午夜性做爰电影| 五月激情婷婷偷拍| 99热91| 91狠狠色| 国精产品久久| 丁香六月激情综合| 99九九热视频免费| www.国产亚洲69ty.久久久久久久久久久久| 日本va欧美va精品发布视频 | 亚洲精品99| 久久a热| 我淫我色婷婷五月天激情四射| sewuyuetingtingiii| 91操操| www.91操| 日本色99| 综合激情sV| 五月丁香精品| 99爱这里只有精品| 色99色| 久久久久这里只有精品| 五月黄色婷婷| 狠狠色丁香婷婷基地| 久久只这里有精品| 99ri精品在线| 思思久久久婷婷| 久久免费操| 综合综合色色| 久久99久久99精品免观看粉嫩| 五月天激情四射| 91伦| 色色色欧美色色| 最新av在线观看| 五月婷婷综合激情小说| 亚洲婷婷五月天在线激情综合网| 直接看的AV| 性爱视频久久| 亚洲AV成人片无码网站| 婷婷丁香在线播放| 无码人妻精品一区二区蜜桃色欲| 国产中文亚洲欧美日韩性交| 91九色国产| WWW.久久99| 中文不卡一二三区| 99热久久这里只有精品| 五月综亚洲| 九九色色| 538午夜激情| 天堂综合久| 久久久亚洲成人无码A片| 免费色色色| 婷婷婷婷色| 久久思思99| 婷婷五月天成人基地| 六月婷婷激情| ...婷婷国产成人亚洲日韩| 91久久久久久| 婷婷五月激情网站| 日本欧美成人片AAAA| 在线视频你懂得| 色综合九九| 午夜]香婷婷深深爱| 丁香亭亭久久| 五月婷婷深深爱| 色一情一乱一乱一区91Av| 欧美色色色色色色| 综合网色| 国产这里只有精品| 激情小说之五月| 69精品人人人人人人人人人| 涩涩婷婷五月| 丁香天堂夜| 综合久久五月天| 日韩成人无码片| 婷婷五月情天| 成人中文字幕在线| 久久免费精彩视频| 天天做天天要天天爽| 亚洲精品又粗又大又爽A片 | 大伊香蕉精品视频在线| 激情网综合| 大操人妻| 久久激情五月天| 亚洲中文字幕网| 这里只有精品视频99| 久久五月丁香| av一级棒av| 99热视精品| 久久这里只有精品视频15| 岛国av电影网站| 五月停亭久久电影| 五月丁香久久综合| 婷婷五月丁香基| 99热在线中出| 丁香色成人| www.99热视频| 99在线精品免费视频| 噜噜噜噜在线| 婷婷丁香社区| 天天干天天干天天| 欧美α√| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 996精品热视频| 2017狠狠干| 色婷婷久久| 午夜一区| 99热这里只有精品1| 五月天色综合| 91男女视频在线观看| 狠狠色综合网站久久久久| 久热超碰91| 激情五月婷婷视频一区二区三区| 99免费热视频| www.99热日韩.com| 丁香社92视频| 久热婷婷| 欧美25p| 五月丁香大香蕉| 成人精品视频99在线观看免费| 五月综合婷婷久久在线| 五月丁香婷婷久久| 国产高潮白浆一区二区| 色五月综合网| 婷婷激情人妻| 日本熟女内射| 99热这里有精品6| www.婷婷久久五月天| 外国碰视频网站97| 丁香五月天在线| 乱码操操| 久久码久久无清| 99这里只有精品|v| 婷婷五月激情的图片| 激情五月天在线观看色婷婷| 97日本在线| 免费黄色片子| 六月婷婷激情图片| 五月丁香六月婷婷综合网站| 热的国产,热的综合,热的有码| 日韩啪图| 嫩草AV久久伊人妇女超级A| 深爱婷婷网| 国产阿姨日皮艹逼内射视频| 激情久久肏屄视频| 激情碰碰碰| 色综合激情| 色色色图| 五月停停丁香| www.色窝| 狠狠操之狠狠操| www.com.色色| 天天操天天国产三级片处女学生妹| www.minyis.com【JT】实力收量可预付QQ2101460746 | 色色色婷婷五月| 怎么样可以看免费的一级av| 99久热| 99无码| 26uuuavcom| 久久狼人天堂| 婷婷欧美激情综合| 久久天堂婷婷五月| 色yeye色综合| 久久XX日本综合| 丁香五月综合| 26uuu欧美日本| 99热在这里只有精品| 先锋男人99资源| 亚洲av免费在线| 色原狠狠综合| 亲子乱av一区二区三区的| 欧美午夜乱妇午夜福利| 激情五月婷婷| 日本人人超碰| 狠狠色色色| 色色色网站| 五月丁香啪啪| 色五月综合网| 亚洲精品白浆高清久久久久久| 色综合久| 另类小说五月天| 狠狠综合| 亚洲成人免费在线| 成人精品一区日本无码网| 91碰在线| 夜夜骑夜夜撸| 国产激情视频在线观看| 日本人妻伦在线中文字幕| 91狠狠色丁香婷婷综合久久精品| 超碰人人艹| 91色涩| 91人碰| 人人摸人人| 丁香婷婷成人网| 狠狠色噜噜| 色五月婷婷内射| 天天色天天色天天色天天色天天色| 1995年关宝慧版蜘蛛女| 色五月综合激情| 成 人 色 色| 国产精品成人av在线观看春天| 99热这里只有精品无码| 亚洲综合99| 天天影视天天爽天天草| 国产成人av在线| 九九亚洲视频| 丁香五月花| 久久caop| 热久69| 99热在线看片| 欧美欧盟性爱网| 欧美丁香婷婷天天操| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 五月丁香六月激情在线| 久草视频一,二三四| 婷婷的99视频网站| 成人午夜视频精品一区| 超碰99成人在线| 色五月天丁香婷婷色| 香焦网五月天| 热久久思思热思思| 99性爱视频网站| 在线只有精品| 婷婷六月天| 中文字幕 中文字幕明步 | 五月丁香六月合| 色丁香婷婷| 另类激情综合| 九九黄色网| 天天色综网| 亚洲久艹| 做爱夜夜干天天操| 天天做好综合色| 4399人妻无码久久久| 狠狠穞A片一區二區三區| 中文字幕丰满孑伦无码专区| 成人AV网站在线| 婷婷色导航| 五月丁香天天| 99热综合在线| 色婷婷成人色网| 免费AV在线| 日本本土色网第一区| 热99精品视频| www.夜夜操.com| 亚州欧美黄色电影| 天天操天天日天天爱| 色五月婷婷视频| 五月天综合久久| 婷婷六月激情| 91丨九色丨国产在线| 综合久久婷婷| 婷婷激情五月综合| 精品一二三区久久AAA片| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 色婷婷丁香五月天在线观看| www色婷婷| 色综合久久8| 26uuu欧美日韩| 夜夜操,天天撸| 97热这里只有精品| 亚洲成人中心| 性生活久久人妻| 久久婷婷六月综合| 五月天婷婷色情| 欧美天天综合网站上去吧| 97色色色| 操逼视频网址| 五月天婷婷六月| 人妻激情在线| 婷婷丁香先锋资源网站| 色五月成人在线| 99久久综合网| 色婷婷超碰| 囯产精品一品二区三区| 婷婷操逼| 另类小说五月天| 强伦轩人妻一区二区电影| 婷婷五月色| 99狠狠| 青草激情在线| 任你躁XXXXX麻豆精品| 日本色道视频网站| 51XX午夜影福利| 九九美女视频| 丁香六月激情综合啪啪| 激情五月丁香五月色| 99热 这里只有精品 国产 日韩| 久久久这里有精品| WWW久久99久久99久久| 这里只有精品,日韩视频| 五月天婷婷綜合院| 伊人色综合久久久| 五月婷婷六月色| 97色精品视频 | 婷婷五月激情在线| 精品亚洲国产成AV人片传媒| 色五月天中文字幕| 六月婷婷综合| 婷婷六月网| 亚洲操操操| 五月天婷婷伊人| 99热这里只有精品1| 久久人人添人人爽添人人片αV| 精品无码av丁香五月激情| 久久久久久综合88| 婷婷精品免费久久| 久久久久er热| 丁香五月婷婷性爱| 噼里啪啦在线观看免费完整版视频 | 激情美女五月天激情在线| 成人片在线播放| 亚洲一个色| 婷婷综合| 久久这里面只有精品视频| 色色色图| 五月婷婷六月激情在线| 99超超碰| 激情五月天伊人av| www.sebowuyue| 五月天激情视频| 99热全是精品| 超碰成人在线观看| 六月色日韩| 五月丁香婷婷综合网| 五月婷婷激情综合在线| 亚洲精品V天堂中文字幕| 久久久久久草黄色片AV在线观看| 国产欧美精品AAAAAA片| 丁香婷婷六月在线资源观看| 欧美在线视频9| 久久人妻人人| 亚洲五月婷婷| 免费无码毛片一区二区A片| 人人添人人| 五月综合激情啪啪啪啪啪| 天天艹天天色| 99热一本久道| 五月丁香六月婷婷久久| 能看的AV网站| 欧美伊人9| 色综合久久天天综合网| 五月人人丁香婷婷五月人人丁香| 91色综合久久| 成人综合AV| 色色无码日韩| 久久免费高| 婷婷五月天AV| 色六月天天激情综合网| 亚洲丁香婷婷| 秋霞性爱AV| 日韩一66精品| 碰碰碰91| 九九在线精品| 99热97| 久久五月网| 九九无码| 九九热这里只有精品6| 另类激情五月| 亚洲情综合五月天| 99热欧美偷拍| 久久婷婷亚洲| 五月丁香中文| WWW.激情| 人操人人| 色婷婷六月| 婷婷五月综合视频免费播放| 亭亭五月丁香综合欧美| 九月停停| 日韩一级片| 婷婷五月视屏| 久久黄色免费视频| 99热综合色图| 婷婷五月激情黄色| 婷婷五月天久久久| 五月婷婷激情综合网| 丁香成人五月天| 性爱激情五月| 亚洲午夜av| 丁香婷婷成人网| 狠色综合网| AV中文字幕夜夜操b天天摸bb| 特黄三级片| 操一操| 99久久婷婷国产综合精品草原| 7777国产盗摄农村女人| 99爱在线视频| 婷婷激情在线| 99热这里只有免费精品| 九九爱这里只有精品| 操人视频91| 成人精品视频99在线观看免费| 天天操婷婷| 五月婷综合网| 天天爱天天做天天舔| www.97碰碰com| 亚洲无码影音| 亚洲精品V天堂中文字幕| 亚洲婷婷激情综合激情999精品| 一个色的综合| 99色综合网| 色婷六月| 婷婷五月色花丁香社区| 久久九九激情五月天| 国产综合激情五月久久| 亚洲成人一区| 超级碰碰碰97免费| 欧美男女婷婷| 中文字幕成人版| 色人久久| 日日杆天天| 激情六月天婷婷| 小视频久久久aaa| 色99综合视频| 亚洲综合婷婷| 婷婷五月天激情亚洲小说| 深爱五月月天| 九九伊人网| 97干综合网| 五月天堂色色| 丁香九色不卡aaa| 俺来也狠狠| 国产精品扒开腿做爽爽爽A片唱戏| 九九伊人网| www.jiujiujiu| 色色亚洲视频| 79精品视频在线观看,| 丁香五月在线视频黑人| 中出内射的人妻视频| 天天爱天天做天天舔| 精a品a视a频| 九九香蕉网| 最新色色五月天| 天天射天天干天插色综合| 婷婷伊人75| 亚洲一级AV在线免费播放| 人人操人人添人人摸97| 亚州激情九月| 97干在线播放| 婷婷亚洲影院| 色之综合网| 婷婷五月天激情网址| 九九99精品视频在线观看| 丁香大香蕉| 久久综合性| 久久大香蕉| 五月婷婷黄色| 丁香五月婷婷六月婷| 丁香婷婷免费| 婷婷五月天成人基地| 久草xx性爱视频| 久久五月情| 五月天久久网站| 九九色院| 久久性爱视频| 狠狠色性| 五月天激情无码专区| 五月婷婷开心综合| 99狠狠| 国产成人综合网| 久久婷婷影院| 丁香五月天天久久综合小说| 色婷婷女优有码五月亭| 99热老网站| 一区二区中文字幕| 伊人成综合五月婷婷| 操操自拍| 亚洲色色五月天| 96丁香六月婷婷蜜桃综合久久| 少妇高潮一区二区三区99欧美| 第2色五月婷| 先锋男人99资源| 五月丁香激情六月| 激情床戏| 99热这里有精品| 五月丁香另类网| 久久人人九| 性爱先锋AV| 婷婷基地五月色| 99热首页| 狠狠色丁香| 亚洲第一成人AV| 久久丝袜婷婷| 伊人五月网| 5五月综合网亚洲| 一起草AV| 9999热精品| 免费AV播放| 天堂婷婷丁香六月网| 丁香综合婷婷五月天| 激情综合网五月婷婷| 天天色中文字幕女优AV| 丁香六月色婷婷| 狠狠色无码| 99狠狠操一| 中字幕视频在线永久在线观看免费| 婷婷色色色| 久久性爱视频| 性色视频| 最新精品视频99| xxx.色婷婷| 热久久这里只有精品| 97成人在线视频| 丁香五月色| 丁香五月综合在线观看| 丁香五月天堂网| 91日综合欧美| 婷婷激情鹿城五月天| 色综合久久中文| 婷婷婷婷婷婷婷婷婷婷丁香| 婷婷丁香人妻天久久| 色久五月天| 丁香九月激情| 五月丁香婷婷综合久久| 五月婷婷六月丁香色| 五月天开心网| 99精品一二三四视频| 五月天婷婷色小说| 色婷婷成人| 色狠狠999综合| 婷婷丁香五月综合激情小说| 色优久久| 一级黄色影片| 日韩欧美成人片| 五月色情精品| 99色播| www激情| 婷婷色在线播放| 亚洲精品色色色| 天天弄天天操| 五月天丁香网| 大香蕉天堂| 国产综合丁香五月天| 伊人婷婷五月| 国产精品国产成人国产三级| 激情五月天在线观看婷婷| 五月丁香婷婷视频| 五月丁香花激情啪啪网| 伊人深爱综合| 久久久久久久11111111111| 色六月天天激情综合网| 97色婷婷| 7777激情基地| 综合激情五月天| www.五月天色色.com| 色五月中文网| 亚州激情九月| 夜夜干天天操| www一起操在线观看| 五月天狠狠草| 在线综合啪| 丁香五月激情无码视频| 欧美天堂婷婷日韩| 婷婷综合六月| 97婷婷五月丁香| CAOBIBI| 久久婷婷五月综合伊人| 色天使色综合| 亚洲激情.com| 天天网曰日曰夜夜综合永久免费| 色婷婷狠狠18| 色香久久| 香蕉狠狠爱视频| 色播婷婷大香蕉| 综合大香蕉| 五月丁香999| 亚洲另类在线观看| 亚州激情网站无码| 亚洲妇女熟BBW| 噜噜噜精品欧美成人在线观看| 超碰人人摸人人操| 无码 色| 久久机热探花| 99操无码视频观看| 激情五月综合网| 人妻久久久| site:esunnet.com| 激情 久久 婷婷| 天天日,天天插| 成人AV中文字幕| 国产操碰| 婷婷亚洲激情在线观看视频| 日韩啪啪视品| 天天日本夜夜谢| 97性视频| 亚洲综合激情五月久久| 青青草原99热| 欧美激情中文字幕| 狠狠综合网| 26uuu国产精品| 俺去婷婷 丁香| 伊人激情综合网| 六月婷婷五月丁香首页| 99热超碰人| 色五月婷婷五月天| 色八月婷婷| 90色免费视频| 九九AV在线| 丁香 婷婷五月| 五月婷狠狠| 99福利导航| 亚洲激情无码久久| 婷婷五月丁香综合桃花色网| 这里只有精品视频99| 婷婷色色播五月天| 九九精品热播| 国精产品一区一区三区免费视频 | 婷婷五月丁香五月天| 亚洲天堂有码| 色婷婷成人在线| 在线观看视频1区| 综合激情在线| 日日操日日干| Av九九| 亚洲成人在线在线| 久久草中文日韩欧美| 婷丁香五月天| 亚洲人妻Av| 国产亚洲精品久久久久久久久动漫| 色色AV色色色东莞| 婷婷黄色五月天在线视频| 五月婷婷97| 婷婷五月天基地| 天天色粽合合合合合合合| 热无码A∨| 丁香六月婷婷综合啪啪| 9精品久久999| 天天色播| 五月天色婷婷综合| 婷婷丁香五月天小说| 九色91美女| 色色999三级片| 五月婷视频| 99在线免费观看| 六月婷婷影院| 综合欧美五月婷婷| 亚洲 视频 导航 一区| 婷婷无五月无码视频| 丁香五月Av| A久久| 人妻操在线看| 天天舔夜夜操www com| 黄网在线免费播放| 亚洲精品另类| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 四虎成人精品永久免费AV九九| 婷婷六月色播| 天天色爽| 欧美激情丁香五月| 天天操中文字幕| 欧在线一区| 九九热123| 婷婷五月成人| 99热综合网| 最新av在线观看| 第四色五月天| 色99热| 九九热视频免费观看| 久久色频| 91精品综合久久久久久五月丁香| 综合狠狠干| 久久网婷婷| 欧美久久久中文字幕| 亚洲亚洲人成综合网络| 亚洲亚洲人成综合网络| 色噜噜狠狠色综合日日| 丁香五月婷婷五月天在线| 五月婷婷婷综合网| 色色色色色五月| 丁香婷婷综合喷| 亞洲自怕| 丁香婷婷五月综合欧美另类| 九九婷婷激情综合网| 久久精品国产AV一区二区三区 | 超碰狠狠操| 色婷婷基地| 丁香五月性爱| 五月天婷婷激情| 天天做天天爱| 国产精品久久久久久久久久免费 | 色性综合| 久久久妻人人人| 噜综合| 丁香六月AV| 开心深爱五月天| 99在线免费视| 爱的综合网| 亚洲五月天婷婷综合| 国产日日操夜夜操的肉棒视频| 开心五月综合激情综合五月| 激情宗合网激情五月天| 婷婷综合色五月天| www.com五月天| 综合网激情| 激情久久丁香| 97人人超| 五月天开心网| 1024国产在线| 天天婬色综合| 日韩日比视频| 五月天婷婷色| 六月色色综合| 五月丁香无码| 激情五月色婷婷| 91成人电影| 婷婷基地爱| 538在线精品| 九九九激情网| 婷婷va| 99久久9| 六月亚洲| 婷婷五月激情天| 人妻久热| 婷婷丁香六月| 久久电影五月天丁香电影| 国产精品岛国片在线观看免费| 国产97色在线 | 日韩| 婷婷香香五月| 久久婷婷婷婷伊人| 婷婷色五月婷| 婷婷五月影院| 亚洲AV成人一区二区在线观看| 五月色亚洲| 亚洲性受XXXX五月丁香| 五月丁香六月婷婷亚洲| 这里只有精品视频在线| 久久五月天婷婷| Www.sesese丁香| AV电影在线播放| 五月天色色色| 人人干人人操外国| 超碰在线91| 影音先锋人妻出差| 97人凄人人操人人爽| 精品一二三区久久AAA片| 31色区视频免费看| a在线观看| 婷婷丁香五月六月激情| 欧美激情五月天| 日日干夜夜干| 婷婷五月天丁香激情| 五月婷婷色播视频| 丁香五月亚综合图片| 色五月在线观看| 五月丁香综合色婷婷| 超碰免费99| 亚洲性爱日韩无码| 超碰九色| 久久综合综合综合| 五月婷婷六月丁| 亚洲丁香五月天视频| 一级黄色影片| 超碰97免费在线| 九九久久99| 日日噜噜夜夜狠狠久久丁香六月| 美女久久婷婷| 久久这里只有精品久久| 噜噜五月天综合| 色色操| 9l视频自拍9l视频自拍九色学生| 亚洲 无码 中文字幕 中出 | 操熟女成人网| 日狠狠| 99热国产婷婷| 狠狠色噜噜狠狠狠888了| 久久久婷婷婷| 美国不卡视频| 日日狠夜夜狠| 色丁香五月婷婷| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 午夜福利8055| 日日婷婷不卡| 91久久久久久| 九九性爱网| 五月丁香婷在线| 五月天激情四射| 91玖玖| 激情六月丁| 六月婷婷综合网2| 天天 青草 制服丝袜 在线| 九九大香蕉黄色影院| 久久久久97| 丁香婷婷六月天| 婷婷激情图片| 热九九精品| XX久久| 99丁香五月婷婷在线| 另类视频丁香五月| 三人荫蒂添的好舒服A片| 激情综合网丁香| 任你日视频| 亚洲有码在线视频| 黄色激情五月天| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV | 无码人妻少妇色欲AV一区二区 | 9色视频在线| 色五月婷婷自拍| 五月婷婷丁香社区| 婷婷福利影院| 狠色狠色综合久久| 天天激情站| 婷婷六月中文字幕| 荫道BBWBBB高潮潮喷| 久久婷婷丁香五月一二三| 五月天开心激情综合网| 久99视频| 五月婷婷AV| 五月天色色网站| 五月丁香性爱| 欧美日朝成人| 狠狠干夜夜干| 狠狠五月激情在线| 婷婷五月天丁香花| 亚洲色色爱| www色婷婷| 色色网站观看| 97色吧| www天天干| 变态 另类 在线 | 97啪在线观看视频| 激情婷婷五月天日本系列| 日日夜夜九九| 婷婷五月丁香香蕉| www一起操在线观看| 色五月婷婷基地| 丁香五月婷婷偷拍| 在线中文字幕av| 99免费综合网| 久久久久人妻| 美女激情婷婷| 久久久色情| 天天色99| 久操热线| 色婷婷五月天| 涩涩涩.com| 91 九色 入口| 二色AV| 激情影院内射| 色青青电影色五月| 色婷婷亚洲精品天天综| 国产三级片91| 丁香五月激情综合| 思思热性操| 久久综合55| 婷婷的色色五月天| 五月激情丁香五月| 欧美成人一区二区三区在线视频| 婷婷五月天偷拍| 日本97在线| 色婷婷亚洲精品天天综| 色天天久婷婷| AV中文字幕夜夜操b天天摸bb | www.久久久久久久久久久| 五月天操逼网| 69堂午夜视频最新地址| 激情 久久 婷婷| 婷婷五月色| 丁香婷婷六月婷婷六月婷婷六月婷婷| 日本强伦片中文字幕免费看| 丁香久久| 九九精品网站| www.玖玖九| 五月丁香成人| 婷婷六月激情啪啪| 9热久久| 开心激情站| 婷婷五月天成人网站| 国产白丝在线一区| 桃色成人网| 99视频精品全部观看10| 丁香色五月直播| 婷婷色综合网日韩国产| 婷婷色播婷婷| 五月丁香久久丝袜啪啪| 五月丁香激情四射| 久久精品A片777777| 色噜噜狠狠色综无码久久合欧美| 丁香婷婷六月婷婷六月婷婷六月婷婷| 99人人爽| 激情婷婷| 丁香婷婷色| 日本a片网址| 色吊丝av中文字幕| 99色视频| 激情网婷婷五月天| 狠狠色丁香婷婷基地| 五月丁香激情综合啪啪| 国外亚洲成AV人片在线观看| 久久婷婷五月天| 国产精品-91JQ就要激情网91JQ6.91JQ27.CASA:16888 | 丁香五月综合久久| 少妇人妻偷人精品无码视频新浪| 99在线免费视频| 亚洲五月综合色播| 99热偷拍| 碰超在线九色| av亚洲国产小电影| 婷婷五月情| 五月丁香婷婷俺| 丁香婷婷五月天色综合| 六月婷婷七月丁香| 九九精品免费视频99| 99久在线精品99re8热| 欧美色色色色色| 久婷婷久草| 成人精品在线| 日本毛片内射| 曰韩五月丁香色婷婷无码| 五月天开心激情综合网| 亚洲色热| 免费视频这里只有精品| 亚洲激情图文小说| 亚洲综合视频网| 婷婷丁香五月天操逼| 久久久99精品免费观看| 五月丁香婷婷成人网| 欧洲色色| 丁香五月六月婷婷殴美综合| 五月婷婷 六月丁香| 五月婷婷丁香| wWW九九在线播放| 午夜福利成人AV91| 五月婷婷亚洲天堂97色婷婷| 丁香五月天社区| 五月婷婷影| 日本久久人人| 狠狠狠狠狠| 99精品免费欧美小视频 | 996热| 丁香六月啪啪| 丁香婷婷六月天| 五月丁香六月| 开心婷婷丁香五月| www.亭亭五月天| 婷婷五月天人妻| 婷婷五月天激情在线观看| 丁香五月六月久久综合| 99热婷婷| 婷婷五月激情网| 色五月超碰| 日韩在线99| 久久综合伊人77777蜜臀| 成人一区在线观看| 九色porny在线观看激情四射| 九九热9| 五月久久丁香| 热久综合| 丁香亭亭激情四射| 综合久久十| 久久综合9| 亚洲国产色婷婷| 97性高潮久久久| 亚洲欧美国产A片免费观看| 色播色丁香五月| 婷婷久久女人| 大香婷婷| 9 99免费视频| 久9热视频在线观看| xxxx久| 六月丁香久久| 婷色人人狠| 激情精品久久| 夜夜做天天爽| 超碰狠狠色| 五月丁香欧美综合| 五月天婷婷7米| 五月丁香色婷婷久久| 亚洲乱码在线观看| 激情综合亚洲| 婷婷色色网| 日韩AV免费看| 婷婷丁香综合在线| 久久婷综合网| 久婷| 激情文学天天| 久久久区区一久久久久久| 天天天天天久久久久久| 狠狠高潮精品亚洲1| 色五月超碰| 六月综合婷婷开心伊人| 午夜少妇在线观看视频| 久久婷婷五月综合色丁香花| 去色色五月天| 久久久性爱网| 婷婷五月天视| 无码人妻一区二区三区免费九色| 99精品小视频| 永久免费视频| 99九九久久| 综合色七七| 久久综合播放| 五月天婷婷色在线视频免费观看| 深爱激情AV| 久久五月天激情| 97色婷婷成人综合在线观看| 可以免费观看的av| 99ri精品在线观看| 综合久久影院| 五月天堂婷婷| 深爱激清网| 五月婷婷丁香| 亚洲情综合五月天| 99色.com| 99色视| 播五月丁香六月| 五月丁香激情四射| 欧美三级巜人妻互换| 丁香五月婷婷综合91| 五月婷色| A久网| 亚洲精品视频在线播放| 96自拍视频九色在线观看| 四季AV综合网| www.国产亚洲69ty.久久久久久久久久久久| 天天狠狠色综合| 九月丁香亭亭| 天天日中文| 色婷婷av在线| 欧美英丁香开心快乐六月天网| 久久Xx| 免看黄大片AA | 色五月超碰| 丁香五月亚洲综合| 99色综合网| 超碰2021| 操操操操操操婷婷五月天| 激情五月天无人视频在线| 色爱亚洲| 人人超碰99| 久久激情五月| 婷婷干六月综合旧址| 99精品视频在线观看免费| 久久欧洲综合网| 欧美激情综合| 黄色aa观看aaguochan| 日日骑夜夜撸| 5五月综合网亚洲| 少妇AB又爽又紧无码网站| 亚洲AV免费国产电影| 丁香五月宝贝激情网| 色狠狠999综合| 婷婷亚洲在线| 激情综合婷婷五月| 丁香五月天激情综合| 久久人妻熟女一区二区| 九九碰九九爱97超| 五月激情偷拍| 蜜桃五月天| 97人妻碰碰碰久| 激情综合丁香五月| 国产精品久久久久久久久久免费 | 五月丁香啪啪激情| 亚洲狠狠干| 国产精产国品一二三在观看| 99在线观看| 五月天婷婷综合网| 岛国AAAV| 99热国产这里只有| 91精品久久久久久| 色婷婷AⅤ| 伊人五月天婷婷| 国产精产国品一二三在观看| 五月婷婷丁香综合| 99热官网| 91av无码| 日日操日日射| 六月丁香啪啪| 久久久婷婷| 亚洲AV人人操| 98永久精品| 噜噜网免费视频| 99久久婷婷国产综合精品电影| 开心激情色婷婷五月天| 九九热超碰| 激情四射网| 久久在线大香蕉| 青青999| 五月婷婷激情综合视频| 国产精产国品一二三在观看| 凹凸7777操操操| 99热色精品| 婷婷五月色| 99热99干| 五月婷婷熟女| 97人人操人人| 久久久久8888| 欧美色色色色色色| 激情伊人网| 欧洲色| 十区AV| 色色色色色色色色色色色色色97| AV在线收看| 久热免费| 激情五月婷婷视频一区二区三区| 91精品综合久久久久久五月丁香| 国产亚洲99久久精品熟| 99亚洲色| 五月婷狠狠| 日本VA视频| 色爱综合五月| 亚洲免费婷婷| 色噜噜五月丁香婷婷| 99热国产免费| 91porn一起草| 91人操| 亚洲另类电影| 五月婷婷六月激情| 久久AAAA片一区二区| 另类少妇人与禽zOZZ0性伦| 五月人妻婷婷| 亚洲综合五月天婷婷| www.五月瑟| 淫荡A片| 99狠狠色| 91丨九色丨东北熟女| 婷婷久久网| 五月天婷婷六月| 五婷婷综合网| 婷婷色五月天在线观看| 成人AV网站在线| 站长推荐无码播放| 亚洲精品视频在线播放| 成人AV在线电影| 国产精品-91JQ就要激情网91JQ6.91JQ27.CASA:16888 | 成人综合网站| 国产色五月婷婷| 怡红院成人AV| 激情婷婷丁香五月天| 97成人丁香婷婷| 成人综合网站| 五月丁香婷婷潮喷中文字幕| 久热婷婷在线视频| 丁香五月91| 激情五月丁香综合蜜桃| 怎么样可以看免费的一级av| 六月丁AV| 五月婷婷激情久久| 99九九久久| 亚洲激情精品| 91久久五月天| 婷婷五月天久久久| 影音先锋人妻出差| 六月婷婷九月丁香| 看片视频在线免费日产在线看| 婷婷激情五月综合基地| 久久国产高潮白浆免费观看99| 爆乳熟妇一区二区三区爆乳| 99国产小视频免费观看| 丁香婷婷影院| 激情综合国产| 国产精品噜噜在线视频| 玖玖综合色区在线观看| 超碰九九热| 色婷婷伦理| 91好好热日本在线| 欧美精品999| 婷婷丁香色五月| 九月丁香| 秋霞九九无码| 婷婷五月色| 欧美色欲色欲天天天www| 色色九九五月天 | 亚洲国产成人AV在线| 黄色AV日韩| 99热只有精品在线观看| 91色逼| 色噜噜丁香| 色婷婷五月天成人网| 五月色婷婷AV| 国产成人av在线| 亚洲正能量欧美|