| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 687 人关注过本帖
标题:这样句柄访问非法吗
只看楼主 加入收藏
ant1234
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2013-7-7
结帖率:75%
收藏
 问题点数:0 回复次数:6 
这样句柄访问非法吗
struct HDC__ pp;
HDC hdc;
pp=*hdc;
2013-08-10 08:28
ant1234
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2013-7-7
收藏
得分:0 
struct HDC__ pp;
HDC hdc;
hdc=GetDC();//上面漏了这一行;
pp=*hdc;//是不是句柄的访问模式都被限定了。编译可以通过运行的时候出错了
而下面同同样的程序编译和运行是通过的,谁告诉我是怎么怎么回事啊。

#include "stdafx.h"
#include   <iostream> //使用标准流;
#include   <conio.h>
using   namespace   std;//导入Std名字空间;
#define DECLARE_HANDLE(name) struct name##__ { int unused; };typedef struct name##__ *name;
int _tmain(int argc, _TCHAR* argv[])
{
DECLARE_HANDLE(HDC);//struct HDC__{ int unused; };typedef struct HDC__ *HDC;
 struct HDC__ pp;
 HDC hdc;
pp.unused=6;
hdc=&pp;
pp=*hdc;
cout<<pp.unused<<endl;
    return 0;
}


[ 本帖最后由 ant1234 于 2013-8-10 23:44 编辑 ]
2013-08-10 12:25
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
hdc=GetDC();//上面漏了这一行;
 pp=*hdc;//

编译都不通过吧

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-08-11 17:59
ant1234
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2013-7-7
收藏
得分:0 
我意思只是获得一个句柄,然后把句柄的值赋值给他一样结构的变量。搞明白句柄是什么东西。
struct HDC__ pp;
case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        pp=*hdc;// TODO: 在此添加任意绘图代码...
这段修改后的代码我在vc2008提示
hellow.exe 中的 0x00111952 处未处理的异常: 0xC0000005: 读取位置 0xda013d36 时发生访问冲突。
或者谁设计一个简单的程序说明hdc是个什么东西,为什么Microsoft,把DECLARE_HANDLE(name) struct name##__ { int unused; };名字叫unused,他真的是没有用的吗,如果有用他有什么用,能写段代码说明他的用处吗。
我看有些人说句柄是整形数据,有些人说句柄是指针,但是从这个结构看HDC确实是一个指向一个结构的数据类型。
还有wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);为什么将一个数强制类型转换后赋值给一个指针变量。这个数据有什么意义啊。在我印象中句柄好像都是通过函数获得的啊像 hdc = BeginPaint(hWnd, &ps);hdc   =   GetDC   (hwnd)
最近刚刚开始学习vc++,遇到句柄就一头雾水,一定要搞明白他是什么东西。不要打什么比喻我要看到实实在在的数据。
2013-08-11 19:27
blueskiner
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:227
专家分:707
注 册:2008-9-22
收藏
得分:0 
F7->F9(set breakpoint)->F5->遇到断点位置->F10 or F11在自动变量区就能看到数据了。
2013-08-11 22:39
ant1234
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2013-7-7
收藏
得分:0 
谢谢楼上的
#define DECLARE_HANDLE(name) struct name##__ { };typedef struct name##__ *name;
我把结构中unused 删除,运行系统生成的程序竟然也会通过。难道他真的没有用吗.microsoft故弄玄虚???,
****.exe 中的 0x00111952 处未处理的异常: 0xC0000005: 读取位置 0xda013d36 时发生访问冲突。为什么会冲突这是怎么回事呢。


[ 本帖最后由 ant1234 于 2013-8-12 01:32 编辑 ]
2013-08-12 01:21
jsmayy
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-8-12
收藏
得分:0 
不懂~太难了~有木有新手
2013-08-12 10:11
快速回复:这样句柄访问非法吗
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016922 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved