ImMaJa
驱动牛犊
驱动牛犊
  • 注册日期2007-09-10
  • 最后登录2008-10-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:2064回复:3

关于C++驱动代码何时使用extern "C"的问题

楼主#
更多 发布于:2007-09-10 01:35
一直用C++,初学驱动,当我写一个最简单的.cpp驱动代码时,发现无法通过编译,Google了一下才知道要在DriverEntry上加extern "C",那除了DriverEntry其它地方到底哪里要加extern "C",哪里不要?一位朋友说是被系统调用的函数就要加,那意思说IRP处理例程的函数也要加咯???对不对?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2007-09-10 08:42
只要DriverEntry即可,其他随意。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
ImMaJa
驱动牛犊
驱动牛犊
  • 注册日期2007-09-10
  • 最后登录2008-10-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-10 14:26
引用第1楼wowocock于2007-09-10 08:42发表的  :
只要DriverEntry即可,其他随意。

谢谢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",哪些不要呢?初学者,还劳烦多帮忙解答一次,谢谢!
thewintersun
驱动牛犊
驱动牛犊
  • 注册日期2007-05-14
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于: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
游客

返回顶部