阅读:1021回复:3
Passthru移植到Win9X出现蓝屏的困惑!!!
把Passthru移植到Windows 9X下面,下载文件或者打开网页有时(注意:是“有时”,不是“总是”)会出现蓝屏,出错位置出现在MPSend()或者PtReceive()的第一行语句,如下(下面只以PtReceive()为例):
PtReceive(....) { // // 这行语句出现异常。 // DbgPrint(\"==> Passthru PtReceive. HeaderSize = %d , LookAheadSize = %d , PacketSize = %d\",HeaderBufferSize,LookAheadBufferSize,PacketSize); ........... } 光从源代码来看没有任何问题,切换到汇编模式,异常位置如下: PtReceive(....) { PUSH EBP MOV EBP,ESP PUSH FF PUSH F3F883B8 PUSH __except_handler3 PUSH EAX,FS:[00000000] <====== 有时在这里出现异常 PUSH EAX MOV FS:[00000000],ESP <====== 有时又在这里出现异常 .......... } 还是看不出有什么问题...:( 考虑到这两行语句跟结构化异常处理有关,把MPSend()和PtReceive()里边的所有结构化异常处理都注释掉(即去掉__try{..} __except(...){}),重新编译,一切正常了。 可是为什么就不能在MPSend()和PtReceive()里边添加结构化异常处理呢???,而在Win2K下面又可以!!! |
|
沙发#
发布于:2003-04-18 14:13
try是给32位的应用程序用的,不要在驱动里面用
如果用ddk编写驱动,驱动里面尽量用纯C编写,而且不要用C的运行时函数。 |
|
|
板凳#
发布于:2003-04-18 15:02
我使用的是“__try”,不是“try”,因此代码是没有错的。
而且: 1、《Programming Wnidows Diver Model》也提到了应该使用“__try”。 2、同样的代码在Windows 2000下面没有任何问题。当然已经使用新的编译指示来编译生成Windows 2000的版本。 |
|
地板#
发布于:2003-04-24 09:44
.................
|
|