好久没发贴了
这是驱动的入口函数,应该按照什么约定去编译这个函数!_stdcall

解决方案 »

  1.   

    NTSTATUS __stdcall DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
      

  2.   

    用DDK编译时,未指定调用约定的函数都默认为__stdcall;如果用VC的IDE来编译,可以在项目设置中修改默认调用约定;在定义函数的时候指定也可以。
      

  3.   

    那为什么什么有的是:
    #pragma INITCODE
               extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,IN PUNICODE_STRING pRegistryPath)这里的external “C”不是_cdcel
      

  4.   

    extern "C"只影响函数的命名,不影响调用约定。如果没有extern "C",编译会按照C++的命名规则来生成函数名,函数名中会包含每个参数及返回值的类型。如果指定了extern "C",对于__cdecl约定,函数名是在原名称前面加下划线;对于__stdcall约定,函数名后面还会增加一个下划线、一个@符号和一个数字,数字表示该函数的参数所占用的总空间。