阅读:1747回复:2
VC7+2KDDK集成问题
是的,VC7在编译性能和使用方便都比VC6要强得多。但现在DS和DDK版本都不能支持VC7(不知道哪位大侠有更新的版本能直接支持VC7吗?共享一下,也算是积下一点功得)。
通过我昨天的调试分析得到以下几点,当然最重要的还是DS和DDK版本低! 就DDK来讲 1、VCCHECK.EXE 这个文件只能检测到VC5、VC6,还不能找到VC7,原因VS.NET安装后在注册表中的信息不再和以前的DevStudio相同了。 在DevStudio中VC5、VC6在注册中信息是HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\6.0\\Products\\Microsoft Visual C++ 还现在的VS.NET在注册表中信息是 HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\7.0\\Setup\\VC。还我们现在能找到的DDK中VCCHECK.EXE还是用DevStudio方式在注册表中找VC的安装目录,所以它找不到VC的目录。要解决这个问题很容易,只要用一个资源修改器打开VCCHECK.EXE修改一下它字串表就OK了! 我的修改如下: 旧的: 1,Software\\Microsoft\\DevStudio\\6.0\\Products\\Microsoft Visual C++ 2,Software\\Microsoft\\DevStudio\\5.0\\Products\\Microsoft Visual C++ 3,Software\\Microsoft\\Developer\\Directories 10,Software\\Microsoft\\NTDDK\\Directories 11,New or updated MSVC detected. Updating DDK environment.... 12,Installation of MSVC not detected!!! 13,Using current DDK environment configuration.... 14,Warning:$0D$0A$0D$0A The version of VC that you have installed is not supported$0D$0A for building kernel mode drivers. Some program optimizations$0D$0A will not be available and samples will not build with the$0D$0A current compiler.$0D$0A 新的 1,Software\\Microsoft\\DevStudio\\6.0\\Products\\Microsoft Visual C++ 2,Software\\Microsoft\\VisualStudio\\7.0\\Setup\\VC 3,Software\\Microsoft\\Developer\\Directories 10,Software\\Microsoft\\NTDDK\\Directories 11,New or updated MSVC detected. Updating DDK environment.... 12,Installation of MSVC not detected!!! 13,Using current DDK environment configuration.... 14,Warning:$0D$0A$0D$0A The version of VC that you have installed is not supported$0D$0A for building kernel mode drivers. Some program optimizations$0D$0A will not be available and samples will not build with the$0D$0A current compiler.$0D$0A 这样VCCHECK.EXE就OK了! 二、是VC7\\BIN目录的vcvars32.bat文件 原来这个文件的内容是 %VSCOMNTOOLS%vsvars32.bat 是否大家注意没有,它只有一行是没有换行的 现在我改为 call %VSCOMNTOOLS%vsvars32.bat 并且一定要换行回车,不然VCCHECK.EXE会死机(没想老比的程序还有这样的BUG,:)) 三、把NTDDK\\BIN下的LINK.EXE和RC.EXE等文件换行VC7下的7.0版本的文件 四、就是NTDDK\\BIN下的Makefile.def了 这个文件我暂时还不会改,但它一定有问题,看后述 就DS2.7来讲 它不能生成VC7的工程文件,但它自己的源文件则有VC7的工程文件,并有VC7的IDE下生成LIB没什么问题,不知道为什么????这个我还分析!!!希望大家一起来搞定它! 最后测试 通过上述改后,我用DS2.7生成了一个我没写任何代码的WMD工程来测试 1、在命令行用DDK的BUILD方式 编译时没有任错误,但连接时总是有几个WARNING 如下: link() : warning LNK4044: 无法识别的选项“/NOCOMMENT”;已将其忽略 link() : warning LNK4044: 无法识别的选项“/optidata”;已将其忽略 vdw_wdm.lib(stcinit.obj) : warning LNK4210: 存在 .CRT 节;可能有未处理的静态初始值设定项或结束符 b.obj() : warning LNK4210: 存在 .CRT 节;可能有未处理的静态初始值设定项或结束符 vdw_wdm.lib(stcinit.obj) : warning LNK4210: 存在 .CRT 节;可能有未处理的静态初始值设定项或结束符 最终还是生成了SYS文件。 我知道这些问题原因是来自Makefile.def文件中定义的连接选项了,原因是因为7.0的LINK.EXE不再支持选项/NOCOMMENT和/optidata了,但我不知道/NOCOMMENT和/optidata的作用是什么,不知道在7.0的LINK.EXE要用什么选来代替???希望哪位大侠能帮改一改???? 在VC7的IDE环境下 也能编译过去但有一个warning,如下 B.cpp(143) : warning C4291: “void *KDevice::operator new(size_t,PCWSTR,ULONG,PCWSTR,ULONG,ULONG)” : 未找到匹配的删除运算符;如果初始化引发异常,则不会释放内存 C:\\DS\\DriverWorks\\include\\kdevice.h(39) : 参见“KDevice::operator new”的声明 错误出在函数NTSTATUS B::AddDevice(PDEVICE_OBJECT Pdo)中的 BDevice * pDevice = new ( static_cast<PCWSTR>(KUnitizedName(L\"BDevice\", m_Unit)), FILE_DEVICE_UNKNOWN, NULL, 0, DO_DIRECT_IO | DO_POWER_PAGABLE ) 中 但连接就不能通过了 错误如下: B.obj : error LNK2001: 无法解析的外部符号 ___CxxFrameHandler BDevice.obj : error LNK2001: 无法解析的外部符号 ___CxxFrameHandler .\\objchk\\i386\\b.sys : fatal error LNK1120: 1 个无法解析的外部命令 不知道为什么?? 总结: 希望大家一同来研究这个问题,我想大家都希望能用VC7,还不是在我们系统中同时安装VS.NET和VC6吧(能不能这样安装?我没试过)。当然我们当中一个有人已经成功的用VC7来写驱动了,他们一定有更好方法或更高版本,我真的希望这些人能大量一些,既然来到了这些,我想你们一定也是爱上了这个地方或这里的每一个会员,如此就应该有着共享的精神,不然以后不会有更好的关于驱动开发的论谈了。。。。。。。!!!!!对我来说,我只是一个爱好者,还不是专业搞驱动的,我只为了一种技巧还学习!!!!! |
|
沙发#
发布于:2004-10-19 17:52
我用 vc7 + xpddk
xpddk 必须要求是 vc7以上 有很多问题 why? |
|
|
板凳#
发布于:2005-05-12 17:19
等待
|
|