| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 491 人关注过本帖
标题:vb 调用 MoveToEx 的 bug
只看楼主 加入收藏
afeibfp
Rank: 2
等 级:论坛游民
威 望:1
帖 子:11
专家分:31
注 册:2007-6-1
收藏
 问题点数:0 回复次数:2 
vb 调用 MoveToEx 的 bug
MoveToEx 这个函数竟然会修改参数的值,百思不得其解
代码如下
程序代码:
Option Explicit

Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As Long) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long

Private Sub Command1_Click()
Dim drawhdc As Long
Dim ret As Long

    drawhdc = Me.hdc
    Debug.Print drawhdc
    
    Debug.Print MoveToEx(Me.hdc, 10, 10, 0&)
    Debug.Print LineTo(Me.hdc, 100, 10)

    Debug.Print MoveToEx(drawhdc, 10, 10, 0&)
    Debug.Print drawhdc
    Debug.Print LineTo(drawhdc, 10, 100)

    Me.Refresh
End Sub


打印的结果:
 1593906163
 1
 1
 1
 10
 0
可以看到drawhdc已经从 1593906163被修改为10,导致最后一次LineTo函数的调用失败。
如果 一直用Me.hdc做参数的话,有时会导致vb的崩溃,无法捕捉任何错误信息。

更加奇怪的事情是,如果在Dim drawhdc As Long 后面再声明一个变量Dim ret As Long,那就完全正确了。

崩溃啊
2014-05-31 03:08
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:0 
MoveToEx(drawhdc, 10, 10,byval 0&)
2014-05-31 10:24
afeibfp
Rank: 2
等 级:论坛游民
威 望:1
帖 子:11
专家分:31
注 册:2007-6-1
收藏
得分:0 
回复 2 楼 bczgvip
谢谢
2014-05-31 20:42
快速回复:vb 调用 MoveToEx 的 bug
数据加载中...
 
   



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

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