注册 登录
编程论坛 VC++/MFC

这样句柄访问非法吗

ant1234 发布于 2013-08-10 08:28, 689 次点击
struct HDC__ pp;
HDC hdc;
pp=*hdc;
6 回复
#2
ant12342013-08-10 12:25
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 编辑 ]
#3
yuccn2013-08-11 17:59
hdc=GetDC();//上面漏了这一行;
 pp=*hdc;//

编译都不通过吧
#4
ant12342013-08-11 19:27
我意思只是获得一个句柄,然后把句柄的值赋值给他一样结构的变量。搞明白句柄是什么东西。
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++,遇到句柄就一头雾水,一定要搞明白他是什么东西。不要打什么比喻我要看到实实在在的数据。
#5
blueskiner2013-08-11 22:39
F7->F9(set breakpoint)->F5->遇到断点位置->F10 or F11在自动变量区就能看到数据了。
#6
ant12342013-08-12 01:21
谢谢楼上的
#define DECLARE_HANDLE(name) struct name##__ { };typedef struct name##__ *name;
我把结构中unused 删除,运行系统生成的程序竟然也会通过。难道他真的没有用吗.microsoft故弄玄虚???,
****.exe 中的 0x00111952 处未处理的异常: 0xC0000005: 读取位置 0xda013d36 时发生访问冲突。为什么会冲突这是怎么回事呢。


[ 本帖最后由 ant1234 于 2013-8-12 01:32 编辑 ]
#7
jsmayy2013-08-12 10:11
不懂~太难了~有木有新手
1