不要让BIB文件成为加载驱动的拦路虎
//=====================================================================
//TITLE:
// 不要让BIB文件成为加载驱动的拦路虎
//AUTHOR:
// norains
//DATE:
// Wednesday 10-November-2010
//Environment:
// Windows CE 6.0
// TCC8900
//=====================================================================
最近在将WinCE 5.0驱动移植到WinCE 6.0时,发现了一件很匪夷所思的怪事,就是驱动根本没有被加载。从输出的串口消息看出,XXX_Init函数根本就没有被调用。难道是系统将驱动给忽略掉了?虽然这可能性不大,但还是要确认一下。所以,就手动调用ActivateDeviceEx试试,结果返回为FALSE。用GetLastError查看错误值,为2,查看Error Lookup,提示系统找不到指定的文件。
这就奇怪了,通过ActiveSync在Windows目录实实在在看到文件了啊?不信邪了,将驱动注册表的DLL换个名字,然后将编译好的驱动也换个名字,拷贝到Windows目录,然后调用ActivateDeviceEx,结果居然成功加载了!
改了名字就能成功加载,首先可以断定问题绝对不是出在代码上,也不会出在编译阶段,那么会在哪里呢?和文件有关的,莫非是BIB文件?
打开我驱动下的bib文件,内容如下:
MODULES
EncSecMgr.dll $(_FLATRELEASEDIR)/Enc.dll NK
这语句看起来应该没有什么问题,因为在WinCE 5.0是一切正常的。不过,突然想起来,WinCE 6.0的内存机制已经变动很大,会不会是因为DLL没有重定位的原因?想到这里,将该语句添加一个K属性,如:
MODULES
EncSecMgr.dll $(_FLATRELEASEDIR)/Enc.dll NK K
烧录系统,测试,XXX_Init 函数被调用,输出了相应的串口信息。OK,一切正常!