当前位置: 首页 > news >正文

在凡科网申请的网站设置网页访问密码/网络营销的四大要素

在凡科网申请的网站设置网页访问密码,网络营销的四大要素,网页制作图片滚动特效,成都哪个公司做网站句柄与指针所谓 句柄实际上是一个数据,是一个Long (整长型)的数据。句 柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI 对…
句柄与指针

所谓 句柄实际上是一个数据,是一个Long (整长型)的数据。句 柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI 对象等等。WINDOWS句柄有点象C语言中的文件句柄。 从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他 的WINDOWS函数就可以使用该句柄,以引用相应的对象。

如果想更 透彻一点地认识句柄,我可以告诉大家, 句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可 以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境 下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢? 为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本 身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。 句柄地址(稳定)→记载着对象在内存中的地址────→对象在内存中的地址(不稳定)→实际对象 本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。 但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。

1、句柄 所指的可以是一个很复杂的结构,并且很有可以是与系统有关的,比如说上面所说的线程的句柄,它指向的就是一个类或者结构,他和系统有很密切的关系,当一个线程由于不可预料的原因,而终止时在系统就可以回它所占用的资料,如CPU,内存等等,反过来想可以知道,这个句柄中的某一些项,是与系统进行交互的。由于Windows系统,是一个多任务的系统,它随时都可能要分配内存,回收内存,重组内存。 2、指针它也可以指向一个复杂的结构,但是通常是用户定义的,所以的必需的工作都要用户完成,特别是在删除的时候。 但在VC++6.0中也有一些指针,它们都是处理一些小问题才用的,如最常见的字符的指针,它也是要用户处理的如果你动态分配了内存;但是Cstring 就不要用户处理了,它其实是VC++中的一个类,所以的操作都由成员函数完成,产生(分配)由构造函数,删除(回收)由析构函数完成。 3.句柄是标号,指针是内存地址

句柄和指 针根本就不是一回事,基本上没有共同的地方。我对句柄的定义是:. 句柄是系统内部受保护的数据结构的标志或者说索引. 我的解释: 当你的应用程序或者系统建立内核对象,用户对象,GUI对象的时候实际上这些对象是一些内存数据结构(这个就不要我解释了吧)显然这些对象需要受到保护, 不能让用户随便修改访问,否则系统很容易崩溃所以提供了一个机制来保护性的访问这些对象,那就是API句柄是这些对象的标记,或者说是索引在内存中往往会 存在一张句柄表,一般至少有如下结构 索引(也就是句柄) 指针(指向内存对象数据结构)其他项 1 ox???????? 2 ox???????? 3 ox???????? 4... 系统采用API,查询句柄表,取得句柄所对应的指针,这个指针才是真正的指针,用它可以访问修改受保护的内存. . 假如句柄是指针 . 1 你自己输出一些句柄的值来看,句柄一般都是一些很小的整数值,比如1,2,3,4...... 如果是指针的话,它起不是指向受保护的区域?岂不是NULL指针??? 2 句柄如果是指针的话,那么用户岂不可以直接访问内存对象了?那系统还有什么稳定性,安全性? 3 你把得到的句柄,比如hwnd做hwnd++,hwnd--等运算,你看错不错其他理由我都不想说了 如果有人说看到句柄的定义为指针(我没有看到过) 那你就去当指针吧,反正指针也是32位的值,和无符号整数没有任何区别.

附注:获得窗口句柄三种方法

1.HWNDFindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)

HWNDFindWindowEx(HWND hwndParent, HWND hwndChildAfter,LPCTSTR lpClassName, LPCTSTRlpWindowName)

2.HWNDWindowFromPoint(POINT& Point)//获得当前鼠标光标位置的窗口HWND

3.BOOLCALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)

BOOL CALLBACKEnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc,LPARAM lParam)
BOOL CALLBACK EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)

指针 句柄之间的转换

a.由指针获得句柄
CWnd * pWnd;
CWnd HWnd;
HWnd = pWnd->GetSafeHWnd();

b.由句柄得到指针:
CWnd* pWnd=FromeHandle(hMyHandle);
pWnd->SetWindowText("Hello World!");
or CWnd* pWnd; pWnd->Attach(hMyHandle);

MFC类中有的还提供了标准方法,比如Window 句柄 :
static CWnd* PASCAL FromHandle( HWND hWnd );
HWND GetSafeHwnd( ) const;

对于位图:
static CBitmap* PASCAL FromHandle( HBITMAP hBitmap );
static CGdiObject* PASCAL FromHandle( HGDIOBJ hObject );
HGDIOBJ GetSafeHandle( ) const;

句柄是指针的“指针”
指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄(本质上仍是一个指针,但不要直接操作它),平时你只是在调用API函数时利用这个句柄来说明要操作哪段内存。当你需要对某个内存进行直接操作时,可以使用GlobalLock锁住这段内存并获得指针来直接进行操作。

来自:

感谢博主

http://blog.csdn.net/u012350993/article/details/25386531

GetSafeHwnd()和GetSafeHandle()的主要区别:
1.使用者不同:
(1)窗体使用:
GetSafeHwnd()用于获取窗体的安全句柄(即HWND),有了HWND我们就可以方便的对HWND指向的窗体进行所需的操作了;
(2)GDI对象使用:
GetSafeHandle(),用于获取GDI对象的句柄。

注意:在使用指针时强烈建议这么做:
    ->pSomeWnd 为一个窗体的指针
if ( NULL != pSomeWnd && NULL != pSomeWnd->GetSafeHwnd())
{
   do something.
   }

//

补充知识:

内存句柄与指针的区别:

1.句柄其实就是指针,但是他和指针最大的不同是:给你一个指针,你可以通过这个指针做任何事情,也许是好事,也许是通过这个指针破坏内存,干一些捣乱的事情。这个我想大家都会碰到过,因为乱用指针可能会导致程序崩溃。
句柄就没有这个缺点,通过句柄,你只能干一些windows允许你干的事情(例如调用一些api函数等等),没有了指针的随意。

2.句柄是一些表的索引也就是指向指针的指针。 句柄和指针都是地址,句柄是windows编程的一个关键性的概念,编写windows应用程序总是要和各种句柄打交道。
所谓句柄,就是一个唯一的数,用以标识许多不同的对象类型,如窗口、菜单、内存、画笔、画刷等。在win32里,句柄是指向一个无类型对象”(void)的指针,也就是一个4字节长的数据。
无论它的本质是什么,句柄并不是一个真正意义上的指针
从构造上看,句柄是一个指针,尽管它没有指向用于存储某个对象的内存位置。事实上,句柄指向一个包含了对该对象进行引用的位置。
句柄的声明是这样的:
typedef void handle

由于windows是一个多任务操作系统,它可以同时运行多个程序或一个程序的多个副本。这些运行的程序称为一个实例。为了对同一程序的多个副本进行管理,windows引入了实例句柄。windows为每个应用程序建立一张表,实例句柄就好象是这张表的一个索引。

 
不同之处还在于:
1
、句柄所指的可以是一个很复杂的结构,并且很有可以是与系统有关的,比如说上面所说的线程的句柄,它指向的就是一个类或者结构,他和系统有很密切的关系,当一个线程由于不可预料的原因而终止时,系统就可以回收它所占用的资源,如cpu,内存等等。反过来想可以知道,这个句柄中的某一些项,是与系统进行交互的。由于windows系统是一个多任务的系统,它随时都可能要分配内存,回收内存,重组内存等。 
2
、指针它也可以指向一个复杂的结构,但是通常是用户定义的,所有的必需的工作都需用户完成,特别是在删除的时候。 但在vc++6.0中也有一些指针,它们都是在处理一些小问题才用的,如最常见的字符的指针 它也是需要用户处理的,譬如你动态分配了内存;但是cstring就不要用户处理了,它其实是vc++中的一个类,所有的操作都由成员函数完成,产生(分配)由构造函数,删除(回收)由析构函数完成。

附注:获得窗口句柄三种方法

1.HWND FindWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName);

 

HWND FindWindowEx( HWND hwndParent, HWND hwndChildAfter,
LPCTSTR lpszClass, LPCTSTR lpszWindow );

2.HWND WindowFromPoint( 
          POINT Point);//
获得当前鼠标光标位置的窗口hwnd

3.BOOL CALLBACK EnumChildProc( HWND hwnd, LPARAM lParam);

 

BOOL EnumChildWindows( HWND hWndParent,
WNDENUMPROC lpEnumFunc,
LPARAM lParam );
BOOL EnumWindows( WNDENUMPROC lpEnumFunc, LPARAM lParam ); 
BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lParam );

补充知识:指针和句柄之间的转换

a.由指针获得句柄 
      CWND* pwnd ;
      HWND  hwnd ;
      hwnd = pwnd-> GetSafeHwnd();

b.由句柄得到指针:
      CWND* pwnd = FromeHandle(hmyhandle);
      pwnd-> SetWindowText(" hello world!" ) ;

mfc类中有的还提供了标准方法,比如window 句柄 : 
static CWND pascal FromHandle( HWND hwnd )
HWND GetSafeHwnd( ) const

对于位图: 
static cbitmap pascal fromhandle( hbitmap hbitmap )
static cgdiobject pascal fromhandle( hgdiobj hobject )
hgdiobj getsafehandle( ) const


有人说句柄就是一个标示,一个id号,是错误的。一个id号可以包括多个资源,比如说单文档中的idr_mainframe,一般是指在硬盘上的资源。但是当把硬盘上的资源调入内存以后,将有一个句柄指向它,但是句柄只能指向一个资源。而且句柄知道所指的内存有多大。而指针指向地址,它不知道分配的内存有多大。
但是如果你定义一个句柄,然后在vc里面右击鼠标,选择" go to definition of handle,你会发现它的本质就是一个指针,但是它的作用不同于指针。

句柄是个指针,指向一块内存,但至于这块内存跟句柄所标识的对象是怎么联系起来的,调用者不需要清楚,调用者只需要知道,这个句柄联系着一个win32对象。
    句柄是物理地址,可以跨进程传递,例如,handle ha进程a的一个窗口,你可以在进程b中利用一个跟ha相等的值(相等就是说它们强制转成int32的值相等)初始化一个句柄,利用这个句柄你可以对进程a的那个对象进行操作,例如movewindow showwindow等。
句柄包含了一些引用计数之类的东西,所以我的上一点说的给句柄赋值是不安全的,windows api提供了一些函数,可以对句柄进行操作。


    句柄就是受限的指针。
它是由操作系统管理的,你不能通过它直接存取操作系统创建的数据结构(应该先获取对应的指针)。

操作系统在创建一个对象(如gdi, file)等的时候,它会为这个对象上下文context保留一块数据结构,然后把它放在一张全局表中。句柄就是这块数据结构在表中的索引。





http://www.lbrq.cn/news/1610209.html

相关文章:

  • 教你做面膜v官方网站/青岛seo
  • 做网站公司上海/企业网站官网
  • 杭州app开发公司集中/海淀区seo引擎优化多少钱
  • 做网商哪个国外网站好/怎么联系百度客服
  • 专业北京网站建设公司排名/怎样做自己的网站
  • 打金传奇rmb回收/下载班级优化大师app
  • 建设适应连锁行业网站/营销策划书案例
  • 团委网站建设的问题及原因/广州新闻最新消息今天
  • html下载网站模板/百度关键词推广帝搜软件
  • 上海网站建设sh808web/网站如何推广营销
  • 银川市住房和城乡建设局网站公告/磁力狗在线搜索
  • 门户网站做/建站平台有哪些
  • 网站空间1/如何用html制作网页
  • 郑州上市企业网站建设/网站建设的数字化和互联网化
  • 深圳影视广告制作预算/优化大师最新版本
  • 建什么网站 做 cpa/厦门网站外包
  • 杭州营销型网站制作/怎么做网络营销推广啊
  • 做的差的网站/seo运营
  • 网站通知做文献的格式/厦门seo推广外包
  • p2p网上贷款网站建设方案/千锋教育和黑马哪个好
  • 做婚纱网站的图片大全/营销宝
  • 做办公设备网站/域名注册网站
  • 桂林 门户网站/全国各城市疫情高峰感染高峰进度
  • 专业做家具的网站有哪些/seo网站推广助理
  • 网站建设原则应考虑哪些/自己开平台怎么弄啊
  • 网站建设图片轮播/站内关键词排名软件
  • 秦皇岛建设部网站/谷歌play商店官网
  • 电商网站设计公司皆选亿企邦/网络推广比较经典和常用的方法有
  • 怎样将自己做的网页加入网站/营销型网站建设怎么做
  • 网站建设方案书备案设计图/英文seo兼职
  • 力扣-437.路径总和III
  • Arrays.asList() add方法报错java.lang.UnsupportedOperationException
  • Nvidia Orin DK 刷机CUDA TensorRT+硬盘扩容+ROS+Realsense+OpenCV+Ollama+Yolo11 一站式解决方案
  • Supergateway教程
  • 标记-清除算法中的可达性判定与Chrome DevTools内存分析实践
  • Piriority_queue