本帖最后由 lmhopen 于 2011-01-01 22:07:34 编辑

解决方案 »

  1.   

    typedef HANDLE (WINAPI* fCreateToolhelp32Snapshot)
    (
      DWORD dwFlags,  
      DWORD th32ProcessID  
    );
    定义了一个函数类型,其参数是  DWORD dwFlags,  DWORD th32ProcessID,返回值是HANDLE.(即定义了一个可以指向CreateToolhelp32Snapshot的函数指针。extern fCreateToolhelp32Snapshot _CreateToolhelp32Snapshot;
    声明了一个具有外部链接特性的fCreateToolhelp32Snapshot类型的CreateToolhelp32Snapshot。
      

  2.   

    尤其是写驱动程序,操作系统给出这出的结构:
    struct DrvInfo
    {
    HANDLE (WINAPI* fCreateToolhelp32Snapshot) ( DWORD dwFlags, DWORD th32ProcessID  );
    BOOL (WINAPI* fProcess32First)( HANDLE hSnapshot,  LPPROCESSENTRY32 lppe   );
    ...
    }然后写驱动时:
      HANDLE WINAPI fCreateToolhelp32Snapshot1( DWORD dwFlags, DWORD th32ProcessID  )
        {
          ...
          return hnd;
        } ;
        BOOL WINAPI fProcess32First1( HANDLE hSnapshot,  LPPROCESSENTRY32 lppe   )
        {
           ...
        return bRet;
         };
         DrvInfo MyInfo;
         MyInfo.fCreateToolhelp32Snapshot=fCreateToolhelp32Snapshot1;
         MyInfo.fProcess32First=fProcess32First1;     DrvSetToOS( &MyInfo );//操作系统出的函数,将每一个设备操作函数在结构中传回去。这是在C的年代,没有类,没有继承时的做法。