问5个问题,有的很难!

FlyingSch 2002-07-20 07:51:01
1.为什么VC不允许我按F11追踪函数

210: DeleteFile(szFilePath);
在源代码中按F11进入DeleteFile()结果失败
00401EE0 mov esi,esp
00401EE2 lea ecx,[ebp-108h]
00401EE8 push ecx
00401EE9 call dword ptr [__imp__DeleteFileA@4 (0041c748)]
在Disassemble下也进不了call dword ptr [__imp__DeleteFileA@4 (0041c748)]


==========================================================================
2.请教高手一个段界限的问题

本线程LDT的一个项:
Sel LineBase Limit 界限粒度
167 00000000 0B7A0 Data32 DPL=7 P=1 Type=7 G=0 DT1=1
DS的内容由始到终都是装着167,从上得知选择子167的线性界限为0至0B7A0,可是
存在DS的全局变量的偏移都要求在0x00400000以上,那存取这些全局变量时岂不是会
发生段越界的保护错误?

==========================================================================
3.怎样让进程不在"关闭程序"的窗口中出现?

用RegisterServiceProcess(0,0)好像不行
==========================================================================
4.为什么用EnumFontFamiliesEx列举出的字体名有很多重复的

以下列举出的全是字体的FaceName
仿宋_GB2312
@仿宋_GB2312
Arial
Courier New
Lucida Console
Lucida Console
Lucida Console
Lucida Console
Lucida Console
Tahoma
Tahoma
Tahoma

代码:
CClientDC dc(this);

font.lfCharSet=DEFAULT_CHARSET;
font.lfFaceName[0]=0;
font.lfPitchAndFamily=0;
::EnumFontFamiliesEx(dc.GetSafeHdc(),&font,(FONTENUMPROC )EnumFontFamExProc,(LPARAM) this,0);
==========================================================================
5.用ClassWizard给CView指明菜单上的WM_COMMAND由它自己来响应,可是用SPY++监视消息发现所有的
WM_COMMAND消息均由主窗体CMainFrame来响应。如何解释?

BEGIN_MESSAGE_MAP(CTemp2View, CView)
//{{AFX_MSG_MAP(CTemp2View)
ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
END_MESSAGE_MAP()
...全文
70 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
FlyingSch 2002-07-22
  • 打赏
  • 举报
回复
To : : cwanter(LDT to GDT) 。只是程序的小错误而已,正确结果如下:
Sel Line Limit Data DPL P Type G DT1
167 00000000 0B7A0 Data32 DPL=3 P=1 Type=7 G=0 DT1=1
还有其它的描述符:
15F 00000000 FFFFF Data32 DPL=3 P=1 Type=B G=1 DT1=1 (这就是CS的描述符,一切很正常。)
167 00000000 0B7A0 Data32 DPL=3 P=1 Type=7 G=0 DT1=1
16F 80DDAC20 0001F Data16 DPL=3 P=1 Type=3 G=0 DT1=1
177 00000000 00178 Data16 DPL=3 P=1 Type=3 G=0 DT1=1
17F 00000000 00180 Data16 DPL=3 P=1 Type=3 G=0 DT1=1
187 00000000 00188 Data16 DPL=3 P=1 Type=3 G=0 DT1=1
18F 0009C4C0 002DF Data16 DPL=3 P=1 Type=3 G=0 DT1=1
look__look 2002-07-22
  • 打赏
  • 举报
回复
3.怎样让进程不在"关闭程序"的窗口中出现?

用RegisterServiceProcess(0,0)好像不行

win2k没有提供这个函数!!98可以。
cwanter 2002-07-22
  • 打赏
  • 举报
回复
楼主,问题二:DPL只有2位,怎么会等于7呢?在描述符属性字段中有4位是限值的。
FlyingSch 2002-07-21
  • 打赏
  • 举报
回复
what? what ?
cwanter 2002-07-21
  • 打赏
  • 举报
回复
哦,是数据段,回去查查书。
FlyingSch 2002-07-21
  • 打赏
  • 举报
回复
我用MFC编的怎么会是16位。不信你自己编个MFC然后查看DS对应的
LDT描述符,它的段界限就是那么短,而CS就很长(我忘了是多少,好像是
4G,应该是4G)。
问题3在你回答之前我就会了,哈哈
cwanter 2002-07-21
  • 打赏
  • 举报
回复
问题2。是16位代码吧?
问题3。RegisterServiceProcessFun(GetCurrentProcessId(),1);
问题1。用softice就可以调试。
FlyingSch 2002-07-21
  • 打赏
  • 举报
回复
请高手帮我解答其余的2到3的问题,谢谢
daehappy 2002-07-21
  • 打赏
  • 举报
回复
up!gz!
FlyingSch 2002-07-21
  • 打赏
  • 举报
回复
高手请帮我解答2和4的问题
====================================================================
2.请教高手一个段界限的问题

本线程LDT的一个项:
Sel LineBase Limit 界限粒度
167 00000000 0B7A0 Data32 DPL=7 P=1 Type=7 G=0 DT1=1
DS的内容由始到终都是装着167,从上得知选择子167的线性界限为0至0B7A0,可是
保存在DS的全局变量的偏移都要求在0x00400000以上,那存取这些全局变量时岂不是会
发生段越界的保护错误?
====================================================================
4.为什么用EnumFontFamiliesEx列举出的字体名有很多重复的

以下列举出的全是字体的FaceName
仿宋_GB2312
@仿宋_GB2312
Arial
Courier New
Lucida Console
Lucida Console
Lucida Console
Lucida Console
Lucida Console
Tahoma
Tahoma
Tahoma

代码:
CClientDC dc(this);

font.lfCharSet=DEFAULT_CHARSET;
font.lfFaceName[0]=0;
font.lfPitchAndFamily=0;
::EnumFontFamiliesEx(dc.GetSafeHdc(),&font,(FONTENUMPROC )EnumFontFamExProc,(LPARAM) this,0);
==========================================================================

Wargod2002 2002-07-20
  • 打赏
  • 举报
回复
cdocument,cwinapp之类 的就不是了
FlyingSch 2002-07-20
  • 打赏
  • 举报
回复
CView怎么不是窗口类?CView::GetSafeHwnd()返回的可是很效值啊
Wargod2002 2002-07-20
  • 打赏
  • 举报
回复
你说得对,mfc并不只有窗口类才能响应命令消息,但是这不是command routing的目的,还是看看书和msdn吧
dnyz 2002-07-20
  • 打赏
  • 举报
回复
command routing就是mfc中为了使那些不是窗口类的类来处理WM_COMMAND消息的机制。
因为非窗口类的类是没有窗口函数的,所以不能直接接收WM_COMMAND消息并处理。
FlyingSch 2002-07-20
  • 打赏
  • 举报
回复
多说一点关于"command routing",多说50个字吧,就50个
Wargod2002 2002-07-20
  • 打赏
  • 举报
回复
1.win api不包含调试信息的
5.这就是mfc的command routing
archoo 2002-07-20
  • 打赏
  • 举报
回复
1.DeleteFile是API函数,并不是MFC的代码,所以你没法跟踪;

camel_vc 2002-07-20
  • 打赏
  • 举报
回复
第5个问题,你可以参考一下深入浅出mfc里关于doc/view架构的解释

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧