| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1496 人关注过本帖
标题:SetConsoleCursorPosition调用无效
取消只看楼主 加入收藏
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
SetConsoleCursorPosition调用无效
SetConsoleCursorPosition调用无效,向高手请教
SetConsoleCursorPosition都是正确的传入的,在OD下看也没有看出什么问题,能正常调用和返回。
我用FormatMessage获得错误信息 为:参数不正确
 

完整源代码:

.386
.model flat,stdcall
include windows.inc
include user32.inc
include kernel32.inc

includelib user32.lib
includelib kernel32.lib
.data
 stCursor COORD <>    ;结构变量
 stdHandle dword ?    ;控制台输出句柄
 
 
 messageID dword ?    ;消息ID
 pErroMsg dword ?     ;保存系统分配的缓冲区指针
.code
start:
    invoke GetStdHandle,STD_OUTPUT_HANDLE
    mov stdHandle,eax
   
    ;设置光标位置
    mov stCursor.x,5
    mov stCursor.y,10
     
    invoke SetConsoleCursorPosition,stdHandle, addr stCursor
    call GetLastError   
    mov messageID,eax    ;返回消息ID
    invoke FormatMessage,FORMAT_MESSAGE_ALLOCATE_BUFFER + FORMAT_MESSAGE_FROM_SYSTEM,NULL,messageID,0,addr pErroMsg,0,0
   
;    invoke Sleep,2000   ;挂起2秒,观看效果
end start

搜索更多相关主题的帖子: 控制台 源代码 缓冲区 
2012-08-21 21:19
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
回复 3楼 zklhp
可以了,为什么会这样。我不加DWORD PTR 的时候OD下的参数注释竟然 是X=12888,Y=64  加入后看OD的参数注释就正常了。一开始我还忽略了OD注释的参数。= =!
还有这个DOORD是 WIN32的结构体。在VC下用几乎没有什么问题。到了WIN32这个函数就有问题了,,其他的WIN32结构体也没有这种现象。奇怪之极

 
2012-08-21 21:55
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
dwCursorPosition  这个参数按理是传入结构变量地址就OK了。API会引用结构变量的首地址。(VC下就是这样来使用的)。可谁知道
2012-08-21 21:57
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
回复 8楼 zklhp
我算明白了。这个函数的第二个参数不是传入结构变量的地址。他是按值传递的。
我在msnd 看了函数的原型才知道 dw 前裔 不是lp = =!
BOOL SetConsoleCursorPosition(
  HANDLE hConsoleOutput,  // handle to screen buffer
  COORD dwCursorPosition  // new cursor coordinates);
2012-08-21 22:39
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
回复 8楼 zklhp
OD下看堆栈的参数得知 SetConsoleCursorPosition 函数的第二个参数是按值来使用,而不是按地址引用的。如果你传入地址,那么SetConsoleCursorPosition函数将你堆栈上的地址 就被分成x 和 y 坐标了。而不是去引用你的结构变量地址处的值。  谢谢你了。呵呵
2012-08-21 22:43
快速回复:SetConsoleCursorPosition调用无效
数据加载中...
 
   



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

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