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并且打開了與實際存在的板卡一致的端口地址并且端口地址范圍也滿足實際板卡的要求,則有可能在板卡基地址對應的變量名不符的情況仍能正確的操作端口,但仍不能正確的打開和關閉端口。)(上述問題原因尚不清楚) 在某些情況下,雖然安裝了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的方法才能解決。不知道是否有更好的方法。