berylre
驱动牛犊
驱动牛犊
  • 注册日期2001-08-01
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2710回复:9

.c文件改成.cpp文件后出现的问题

楼主#
更多 发布于:2001-12-18 11:46
driverentry.cpp(873) : error C2317: \'try\' block starting on line \'729\' has no catch handlers
driverentry.cpp(873) : error C2065: \'finally\' : undeclared identifier
driverentry.cpp(873) : error C2143: syntax error : missing \';\' before \'{\'
driverentry.cpp(1055) : error \'ObReferenceObjectByHandle\' : cannot convert parameter 5 from \'void *\' to \'void ** \'

c++里是不是没有finally
1055的错误又是什么意思(.c文件是可以编译通过的)
灌篮高手
KungFu
驱动大牛
驱动大牛
  • 注册日期2001-09-27
  • 最后登录2008-04-08
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望24点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-12-18 13:14
driverentry.cpp(873) : error C2317: \'try\' block starting on line \'729\' has no catch handlers
driverentry.cpp(873) : error C2065: \'finally\' : undeclared identifier
driverentry.cpp(873) : error C2143: syntax error : missing \';\' before \'{\'
driverentry.cpp(1055) : error \'ObReferenceObjectByHandle\' : cannot convert parameter 5 from \'void *\' to \'void ** \'

c++里是不是没有finally
1055的错误又是什么意思(.c文件是可以编译通过的)


没有finally。
参数类型不对。
请注意c和c++的区别。

[编辑 -  12/18/01 作者: KungFu]
我不写驱动好多年
berylre
驱动牛犊
驱动牛犊
  • 注册日期2001-08-01
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-12-18 15:35
但是在后缀是c的时候为什么可以编译通过呢?
NTSTATUS Open (
                  IN PWSTR pProtocol,
                  IN ULONG dEaLength,
                  IN PFILE_FULL_EA_INFORMATION pEaInfo,
                  OUT PHANDLE phHandle,
                  OUT PFILE_OBJECT *ppObject ){
.......
dStatus  = ObReferenceObjectByHandle (
           *phHandle,
           GENERIC_READ | GENERIC_WRITE,
           NULL,
           KernelMode,
           (PVOID)ppObject,//****see error msg****
           NULL );
...........
}
error msg:cannot convert parameter 5 from \'void *\' to \'void ** \', Conversion from \'void*\' to pointer to non-\'void\' requires an explicit cast
灌篮高手
KDriver
驱动中牛
驱动中牛
  • 注册日期2001-06-09
  • 最后登录2008-09-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-12-18 16:24
注意,c++有一种异常机制,而windows自己有一套不同的异常机制。你在程序中使用的try __finally是windows的那一套。如果你把文件名换成cpp那么编译器就用c++的那一套,因此通不过。
“萎软”,是Microsoft的小名!
berylre
驱动牛犊
驱动牛犊
  • 注册日期2001-08-01
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-12-18 16:35
oney的书中说:
\"在C++编译单元中,try语句必须与catch语句成对出现,这是一个完全不同的异常机制,是C++语言的一部分。C++异常机制不能用于驱动程序中\"

那么如果后缀是cpp的文件,是不是就不能用try...finally了?加extern \"C\" 好像也没用。

那就用c++写的驱动程序没有结构化的异常处理机制了吗?
灌篮高手
iamaf~1
驱动小牛
驱动小牛
  • 注册日期2001-09-23
  • 最后登录2003-06-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-12-19 00:04
但是在后缀是c的时候为什么可以编译通过呢?
NTSTATUS Open (
                  IN PWSTR pProtocol,
                  IN ULONG dEaLength,
                  IN PFILE_FULL_EA_INFORMATION pEaInfo,
                  OUT PHANDLE phHandle,
                  OUT PFILE_OBJECT *ppObject ){
.......
dStatus  = ObReferenceObjectByHandle (
           *phHandle,
           GENERIC_READ | GENERIC_WRITE,
           NULL,
           KernelMode,
           (PVOID)ppObject,//****see error msg****
           NULL );
...........
}
error msg:cannot convert parameter 5 from \'void *\' to \'void ** \', Conversion from \'void*\' to pointer to non-\'void\' requires an explicit cast


dStatus  = ObReferenceObjectByHandle (
           *phHandle,
           GENERIC_READ | GENERIC_WRITE,
           NULL,
           KernelMode,
           (PVOID*)ppObject,//****see error msg****
           NULL );
这个论坛不支持长用户名,害得我iamafraid 只好叫iamaf~1了...
iamaf~1
驱动小牛
驱动小牛
  • 注册日期2001-09-23
  • 最后登录2003-06-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-12-19 00:05
driverentry.cpp(873) : error C2317: \'try\' block starting on line \'729\' has no catch handlers
driverentry.cpp(873) : error C2065: \'finally\' : undeclared identifier
driverentry.cpp(873) : error C2143: syntax error : missing \';\' before \'{\'
driverentry.cpp(1055) : error \'ObReferenceObjectByHandle\' : cannot convert parameter 5 from \'void *\' to \'void ** \'

c++里是不是没有finally
1055的错误又是什么意思(.c文件是可以编译通过的)


try 改成  __try
finally 改成 __finally
这个论坛不支持长用户名,害得我iamafraid 只好叫iamaf~1了...
berylre
驱动牛犊
驱动牛犊
  • 注册日期2001-08-01
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2001-12-19 10:02
在各位大侠帮助下,问题已经解决,谢谢:)
我还想顺便问一下,为甚用extern \"C\"把{try...finally}包起来没有用呢?
灌篮高手
iamaf~1
驱动小牛
驱动小牛
  • 注册日期2001-09-23
  • 最后登录2003-06-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-12-19 10:56
在各位大侠帮助下,问题已经解决,谢谢:)
我还想顺便问一下,为甚用extern \"C\"把{try...finally}包起来没有用呢?



没有用!

应该把
try 改成 __try
finally 改成 __finally

这个论坛不支持长用户名,害得我iamafraid 只好叫iamaf~1了...
KDriver
驱动中牛
驱动中牛
  • 注册日期2001-06-09
  • 最后登录2008-09-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2001-12-19 11:41
在各位大侠帮助下,问题已经解决,谢谢:)
我还想顺便问一下,为甚用extern \"C\"把{try...finally}包起来没有用呢?


应该是没有用的。extern \"C\"是用来在cpp文件中向外导出函数时产生C规范的函数内部名。对其他的东西好像没有什么影响
“萎软”,是Microsoft的小名!
游客

返回顶部