rt,谢谢

解决方案 »

  1.   

    #define DECLARE_HANDLE(name) typedef HANDLE nameDECLARE_HANDLE(HINSTANCE);
      

  2.   

    HMODULE 是代表应用程序载入的模块,win32系统下通常是被载入模块的线性地址。
    HINSTANCE 在win32下与HMODULE是相同的东西,在Win32下还存在主要是因为win16
              程序使用HINSTANCE来区别task。
      

  3.   

    它在WINDOWS的内核中,其实就是一个数据结构的指针,我需要这个数据结构的详细定义。楼上的几位说的我都知道呀。
      

  4.   

    是一个指针. void *striking(硬撑者[email protected]) 说的对
      

  5.   

    当一个进程被初始化时,系统要为它分配一个句柄表。该句柄表只用于内核对象,不用于用户对
    象或G D I对象。句柄表的详细结构和管理方法并没有具体的资料说明。通常我并不介绍操作系统中
    没有文档资料的那些部分。不过,在这种情况下,我会进行例外处理,因为,作为一个称职的
    Wi n d o w s程序员,必须懂得如何管理进程的句柄表。由于这些信息没有文档资料,因此不能保证所
    有的详细信息都正确无误,同时,在Windows 2000、Windows 98和Windows CE中,它们的实现方
    法是不同的。为此,请认真阅读下面介绍的内容以加深理解,在此不学习系统是如何进行操作的。
    表3 - 1显示了进程的句柄表的样子。可以看到,它只是个数据结构的数组。每个结构都包
    含一个指向内核对象的指针、一个访问屏蔽和一些标志。
    表3-1 进程的句柄结构
    索引  内核对象内存块的指针    访问屏蔽                   标志
                             (标志位的D W O R D)   (标志位的D W O R D)
    1     0 x ? ? ? ? ? ? ? ?   0 x ? ? ? ? ? ? ? ?     0 x ? ? ? ? ? ? ? ?
    2     0 x ? ? ? ? ? ? ? ?   0 x ? ? ? ? ? ? ? ?     0 x ? ? ? ? ? ? ? ?
    ...   ...                   ...                     ...用于创建内核对象的所有函数均返回与进程相关的句柄,这些句柄可以被在相同进程中运
    行的任何或所有线程成功地加以使用。该句柄值实际上是放入进程的句柄表中的索引,它用于
    标识内核对象的信息存放的位置。因此当调试一个应用程序并且观察内核对象句柄的实际值时,
    会看到一些较小的值,如1,2等。请记住,句柄的含义并没有记入文档资料,并且可能随时变
    更。实际上在Windows 2000中,返回的值用于标识放入进程的句柄表的该对象的字节数,而不
    是索引号本身。
      

  6.   

    HINSTACNE and HMODULE are just pointers to struct IMAGE_DOS_HEADER
      

  7.   

    HMODULE表示模块的句柄,其实就是模块在进程地址空间中的虚拟地址.
    HINSTANCE是exe模块的句柄, 通常等于0x00400000,也就是exe模块在
    进程地址空间中的首地址.
      

  8.   

    我是外行,我也抄点
    DECLARE_HANDLE(HINSTANCE);#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
      

  9.   

    DECLARE_HANDLE(HINSTANCE);
    typedef HINSTANCE HMODULE;      /* HMODULEs can be used in place of HINSTANCEs */
      

  10.   

    void Dump(HINSTANCE hModule)
    {
        const IMAGE_DOS_HEADER * pHeader = (const IMAGE_DOS_HEADER *) hModule;    char message[128];    wsprintf(message, "%x", pHeader->e_magic);    MessageBox(NULL, message, "IMAGE_DOS_HEADER", MB_OK);
    }int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
    {
        Dump(hInstance);
        ...
    }