YJX_Driver_024_驱动代码中C和C++代码区别

Posted DebugSkill

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YJX_Driver_024_驱动代码中C和C++代码区别相关的知识,希望对你有一定的参考价值。

1、

驱动代码中C和C++代码区别
  A、函数调用约定
  B、C和C++编译方式
  C、用C++方式编译驱动
  D、C代码升级至C++
  E、优化21课的代码

本课主要是做着两个工作:"D、C代码升级至C++"、"E、优化21课的代码"

【180】把 第21课 的代码复制过来

 

 

2、
*.c
当文件后缀名为*.c时 编译器将会用C编译器方式编译
*.cpp
当文件后缀名为*.cpp时 编译器将会用C++编译器方式编译
区别:

解决办法
在需要用到C方式编译的函数前加extern "C"

需要用C方式编译的头文件做如下修改
#pragma once
#ifdef __cplusplus
extern "C"
{
#endif
#include <NTDDK.h> //这里包含需要用C方式编译的头文件
#ifdef __cplusplus
}
#endif

1>errors in directory g:\驱动教程\024_驱动代码中c和c++代码区别\mini_ddk
1>mini_ddk.obj : error LNK2001: unresolved external symbol "struct _ServiceDescriptorTable * KeServiceDescriptorTable" ([email protected]@[email protected]@A)
1>bufferoverflowk.lib(gs_support.obj) : error LNK2019: unresolved external symbol [email protected] referenced in function [email protected]
1>sys\i386\ddk_helloworld.sys : error LNK1120: 2 unresolved externals
[email protected]@[email protected]@[email protected]@@Z

[email protected] //要求格式
[email protected]@[email protected]@[email protected]@@Z ?
实例 修改21课的代码 升级到C++编译模式
A、为入口函数 添加Extern "C"
B、修改Source文件
C、修改21课的BUG


extern "C" __declspec(naked) __stdcall test(int a, int b)

 

以上是关于YJX_Driver_024_驱动代码中C和C++代码区别的主要内容,如果未能解决你的问题,请参考以下文章

YJX_Driver_022_NT式驱动的安装

YJX_Driver_009_DDK_HelloWorld_NT

YJX_Driver_014_VM+Wlndbg调试驱动

YJX_Driver_016_为DDK_HelloWorld添加默认派遣例程

YJX_Driver_017_需要具备的理论知识

YJX_Driver_020_JMP地址转换公式推导