阅读:2064回复:3
关于C++驱动代码何时使用extern "C"的问题
一直用C++,初学驱动,当我写一个最简单的.cpp驱动代码时,发现无法通过编译,Google了一下才知道要在DriverEntry上加extern "C",那除了DriverEntry其它地方到底哪里要加extern "C",哪里不要?一位朋友说是被系统调用的函数就要加,那意思说IRP处理例程的函数也要加咯???对不对?
|
|
沙发#
发布于:2007-09-10 08:42
只要DriverEntry即可,其他随意。
|
|
|
板凳#
发布于:2007-09-10 14:26
引用第1楼wowocock于2007-09-10 08:42发表的 : 谢谢wowocock,经常看到你的大名啊~你说的我就放心了~~呵呵~~ 还有一个忘记问的问题,好像#include某些头文件时也要加extern "C",像下面这样: extern "C" //这里不加编译不过 { #include <ntddk.h> } extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPathName) { return STATUS_SUCCESS; } 那#include哪些头文件时要加extern "C",哪些不要呢?初学者,还劳烦多帮忙解答一次,谢谢! |
|
地板#
发布于:2007-09-12 19:53
这个我大概知道,但是我是菜鸟。看完我的回答,麻烦也回答下我的问题:
http://bbs.driverdevelop.com/htm_data/11/0709/105643.html 这个是因为cpp和c编译的时候生成的目标文件不一样。 所以一个程序里面你可能有的用了cpp,有的用了c cpp生成的目标文件是****@YYOSA什么乱七八糟的一个文件名, c生成就目标就是原来的文件名。 所以如果都是cpp文件,就不用extern “c”了。 在编译成目标文件后,在连接的时候,如果又有cpp又有c,因为目标文件命名不一样 所以就会产生连接错误。 你把extern “c”括起来就是告诉编译器,这部分按照c的方式编译, 之后连接的时候就可以找到了 明白了吗?? 记得回答我的问题啊,嘿嘿~ http://bbs.driverdevelop.com/htm_data/11/0709/105643.html |
|