请教一个关于WINDOWS内幕的问题,HINSTANCE在内存中应该是一个数据结构吧,它的数据结构原型是什么?

yrj 2006-02-21 11:22:31
rt,谢谢
...全文
179 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
vc_coldplay 2006-02-22
  • 打赏
  • 举报
回复
HANDLE
详细请上msdn看
YufengShi 2006-02-22
  • 打赏
  • 举报
回复
HMODULE表示模块的句柄,其实就是模块在进程地址空间中的虚拟地址.
HINSTANCE是exe模块的句柄, 通常等于0x00400000,也就是exe模块在
进程地址空间中的首地址.
FengYuanMSFT 2006-02-22
  • 打赏
  • 举报
回复
HINSTACNE and HMODULE are just pointers to struct IMAGE_DOS_HEADER
coordinate 2006-02-22
  • 打赏
  • 举报
回复
当一个进程被初始化时,系统要为它分配一个句柄表。该句柄表只用于内核对象,不用于用户对
象或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中,返回的值用于标识放入进程的句柄表的该对象的字节数,而不
是索引号本身。
Seu_why 2006-02-22
  • 打赏
  • 举报
回复
是一个指针. void *

striking(硬撑者-theCpp@hotmail.com) 说的对
  • 打赏
  • 举报
回复
DWORD

呵呵
yrj 2006-02-22
  • 打赏
  • 举报
回复
它在WINDOWS的内核中,其实就是一个数据结构的指针,我需要这个数据结构的详细定义。楼上的几位说的我都知道呀。
一个傻冒 2006-02-22
  • 打赏
  • 举报
回复
HMODULE 是代表应用程序载入的模块,win32系统下通常是被载入模块的线性地址。
HINSTANCE 在win32下与HMODULE是相同的东西,在Win32下还存在主要是因为win16
程序使用HINSTANCE来区别task。
striking 2006-02-22
  • 打赏
  • 举报
回复
是一个指针. void *
insanehh 2006-02-22
  • 打赏
  • 举报
回复
#define DECLARE_HANDLE(name) typedef HANDLE name

DECLARE_HANDLE(HINSTANCE);
FengYuanMSFT 2006-02-22
  • 打赏
  • 举报
回复
IMAGE_DOS_HEADER
pripor 2006-02-22
  • 打赏
  • 举报
回复
void
FengYuanMSFT 2006-02-22
  • 打赏
  • 举报
回复
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);
...
}
nodefault 2006-02-22
  • 打赏
  • 举报
回复
DECLARE_HANDLE(HINSTANCE);
typedef HINSTANCE HMODULE; /* HMODULEs can be used in place of HINSTANCEs */
zsx0077133 2006-02-22
  • 打赏
  • 举报
回复
我是外行,我也抄点
DECLARE_HANDLE(HINSTANCE);

#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧