l. DLL文件存放路徑的問題: 板卡廠商提供DLL庫的存放路徑可以有以下幾種: 與調用DLL庫的程序文件同一路徑,如MCGS要調用某個DLL庫,就應該把這個DLL庫存放到X:\MCGS\Program中,而不是和設備驅動放在同一路徑; 2. X:\windows\system下; 3. X:\windows\system32下。 三. 板卡驅動開發過程中的問題 a. 通常,如果一塊板卡占用多個IO地址,這些地址都是連續的,一塊板卡會有一個基地址,所有的IO地址都是在這個基地址的基礎上加上一個偏移量構成。 b. 要使驅動操作端口要把下麵四個DLL庫函數聲明加入到代碼的頭部。這四個函數包括端口讀寫和打開/關閉端口的功能。 Public Declare Function Inp Lib "mcgsext.dll" (ByVal Handle As Long, ByVal PortAddress As Long) As Long Public Declare Function Outp Lib "mcgsext.dll" (ByVal Handle As Long, ByVal PortAddress As Long, ByVal Value As Long) As Long Public Declare Function OpenPort Lib "mcgsext.dll" (Handle As Long) As Long Public Declare Function ClosePort Lib "mcgsext.dll" (ByVal Handle As Long) As Long c. 端口打開後要及時關閉。如未關閉就退出進程,可能再次運行時不能正確打開端口,需要重新啟動計算機才能恢複。 d. 在WINDOWS2000下編寫通用版板卡類設備構件需要讀寫端口時,要使用MCGS軟件運行環境下聯調的方式調試程序,而不是使用驅動開發工程裏的調試工程(TestDev)。因為TestDev和MCGS運行環境不在同一個進程中,在不同的進程中創建的MCGSPORT句柄是不能互用的。 四.windows2000下有關MCGSPORT不能打開問題 設備屬性頁中的板卡基地址對應的變量名必須聲明為如下形式 Public DevBaseIO As Long 否則將無法由設備構件主動打開和關閉MCGSPORT端口,其結果是無法正確的操作端口讀寫數據。另外,使用此變量名在屬性頁中輸入的地址值在屬性頁初始化代碼中自動轉換為16進製數。(注意:在某些情況下,例如由其他設備構件打開了MCGSPORT並bing且qie打da開kai了le與yu實shi際ji存cun在zai的de板ban卡ka一yi致zhi的de端duan口kou地di址zhi並bing且qie端duan口kou地di址zhi範fan圍wei也ye滿man足zu實shi際ji板ban卡ka的de要yao求qiu,則ze有you可ke能neng在zai板ban卡ka基ji地di址zhi對dui應ying的de變bian量liang名ming不bu符fu的de情qing況kuang仍reng能neng正zheng確que的de操cao作zuo端duan口kou,但dan仍reng不bu能neng正zheng確que的de打da開kai和he關guan閉bi端duan口kou。)(上述問題原因尚不清楚) 在某些情況下,雖然安裝了MCGS,但是在設備管理器中仍找不到MCGSPORT,甚至重新安裝MCGS也不能解決問題,這時可以用如下步驟打開MCGSPORT。 1) mcgsport.sys安裝成功後,應能在\winnt\system32\drivers\mcgsport.sys找到,如果沒有說明安裝不成功,需要重新安裝MCGS。 2) 機器啟動後,係統自動啟動該內核對象服務,可用WIN2000提供的程序->管理工具->計算機管理->係統信息->軟件環境->驅動程序->mcgsport.sys。 3) 正常情況下,該內核對象服務應該是啟動狀態。如果停止,可在開始菜單->運行 下輸入:net start mcgsport,確定,然後刷新軟件環境,可以看到內核對象服務啟動。 板卡通常都提供測試軟件,而測試軟件有時可能占用板卡設定的I/O端口。在WINDOWS 2000下嚐試以上兩步仍不能正確讀寫端口,可以檢查一下板卡的端口是否被測試軟件的虛擬設備驅動占用,如占用則禁用之。 當MCGSPORT的端口地址與其他設備端口衝突可能導致MCGSPORT失效,在設備管理器的設備屬性頁中顯示“驅動程序不存在或工作不正常”,在管理工具中查看內核對象服務處於停止狀態,但此時使用net start命令(如前所示)也不能啟動,此時隻能用重裝MCGS的方法才能解決。不知道是否有更好的方法。