lzwf4
驱动小牛
驱动小牛
  • 注册日期2002-10-10
  • 最后登录2006-06-09
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1968回复:4

怎样在驱动开发中用VC7

楼主#
更多 发布于:2003-01-11 14:42
是的,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:perator new(size_t,PCWSTR,ULONG,PCWSTR,ULONG,ULONG)” : 未找到匹配的删除运算符;如果初始化引发异常,则不会释放内存
C:\\DS\\DriverWorks\\include\\kdevice.h(39) : 参见“KDevice:perator 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来写驱动了,他们一定有更好方法或更高版本,我真的希望这些人能大量一些,既然来到了这些,我想你们一定也是爱上了这个地方或这里的每一个会员,如此就应该有着共享的精神,不然以后不会有更好的关于驱动开发的论谈了。。。。。。。!!!!!对我来说,我只是一个爱好者,还不是专业搞驱动的,我只为了一种技巧还学习!!!!!

最新喜欢:

pelisonpeliso...
ambercctv
驱动牛犊
驱动牛犊
  • 注册日期2002-11-19
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-01-12 17:35
不知道,为何不用vc6.0呢
lzwf4
驱动小牛
驱动小牛
  • 注册日期2002-10-10
  • 最后登录2006-06-09
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-13 12:10
至少,VC7编译的东西比VC6编译的要快得多,这是我有亲身休会的。
我有一次写了一个读狗的程序,没想到用VC6编译的要2个小时,还用VC7编译只要10多分钟,你想我还用VC6吗???
至少其它多方面优点我想你们大家都知道的!
houguojiang
驱动牛犊
驱动牛犊
  • 注册日期2003-01-13
  • 最后登录2003-09-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-13 12:41
.NET 和 VC6.0可以同时装,我试过,但工程文件的图标无法恢复成VC6.0的模样。
szbenben
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2004-11-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-19 00:05
可以在.NET下用DS2.7.操作如下:
(1)、如有VC6.0版本的项目文件,请用DS2.7中的\"tools->source  to DSP converter\"将该工程转化为VC 7.0的项目文件。直接\"Launch visual studio..\"即可加载该工程文件。在VC7.0中的\"项目->属性”中配置Checked 或Free.至此可以正确的编译和连接。
(2)、如已有vc7.0的项目文件,可以运行DS2.7中的\"tools->DDK Build Settings (SetDDKGo) ”,此时已有加载了编译和连接驱动程序环境的vc7.0,打开要编译的项目即可。
游客

返回顶部