Windows驱动程序的编写中,需要使用标准调用约定(_stdcall),尤其是入口函数(DriverEntry):系统会寻找_DriverEntry@8作为驱动程序的入口点。
若用C语言调用约定(_cdecl)则会将DriverEntry编译成_DriverEntry,而不是_DriverEntr@8,那么会导致链接错误。
在默认情况下,VC或DDK提供的编译器会根据源文件的扩展名,来判断使用哪种试编译。当扩展名为.cpp时,编译器会用C++方式编译;当扩展名为.c时,编译器会用C编译器编译。
Windows驱动程序的入口函数规定为_DriverEntry@8,因此用C++编译时,会导致符号链接错误。解决方法是采用extern "C”修饰。
另外,在C++程序中,需要包含ntddk.h或wdm.h,会出现链接错误,也可通过extern "C"来更正。