阅读:2710回复:9
.c文件改成.cpp文件后出现的问题
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文件是可以编译通过的) |
|
|
沙发#
发布于:2001-12-18 13:14
driverentry.cpp(873) : error C2317: \'try\' block starting on line \'729\' has no catch handlers 没有finally。 参数类型不对。 请注意c和c++的区别。 [编辑 - 12/18/01 作者: KungFu] |
|
|
板凳#
发布于: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 |
|
|
地板#
发布于:2001-12-18 16:24
注意,c++有一种异常机制,而windows自己有一套不同的异常机制。你在程序中使用的try __finally是windows的那一套。如果你把文件名换成cpp那么编译器就用c++的那一套,因此通不过。
|
|
|
地下室#
发布于:2001-12-18 16:35
oney的书中说:
\"在C++编译单元中,try语句必须与catch语句成对出现,这是一个完全不同的异常机制,是C++语言的一部分。C++异常机制不能用于驱动程序中\" 那么如果后缀是cpp的文件,是不是就不能用try...finally了?加extern \"C\" 好像也没用。 那就用c++写的驱动程序没有结构化的异常处理机制了吗? |
|
|
5楼#
发布于:2001-12-19 00:04
但是在后缀是c的时候为什么可以编译通过呢? dStatus = ObReferenceObjectByHandle ( *phHandle, GENERIC_READ | GENERIC_WRITE, NULL, KernelMode, (PVOID*)ppObject,//****see error msg**** NULL ); |
|
|
6楼#
发布于:2001-12-19 00:05
driverentry.cpp(873) : error C2317: \'try\' block starting on line \'729\' has no catch handlers try 改成 __try finally 改成 __finally |
|
|
7楼#
发布于:2001-12-19 10:02
在各位大侠帮助下,问题已经解决,谢谢:)
我还想顺便问一下,为甚用extern \"C\"把{try...finally}包起来没有用呢? |
|
|
8楼#
发布于:2001-12-19 10:56
在各位大侠帮助下,问题已经解决,谢谢:) 没有用! 应该把 try 改成 __try finally 改成 __finally |
|
|
9楼#
发布于:2001-12-19 11:41
在各位大侠帮助下,问题已经解决,谢谢:) 应该是没有用的。extern \"C\"是用来在cpp文件中向外导出函数时产生C规范的函数内部名。对其他的东西好像没有什么影响 |
|
|