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的方法才能解决。不知道是否有更好的方法。