lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:2539回复:23

VC 的问题大家帮忙看看

楼主#
更多 发布于:2004-06-01 19:16
用 AppWizard 生成单文档模版项目,用 DevParter 启动 Error Detection 追踪,总在 MainFrame.cpp 中的状态栏、工具栏生成代码中提示出错,

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0(\"Failed to create toolbar\\n\");
return -1;      // fail to create
}

if (!m_wndStatusBar.Create(this) ||!m_wndStatusBar.SetIndicators(indicators,
 sizeof(indicators)/sizeof(UINT)))
{
TRACE0(\"Failed to create status bar\\n\");
return -1;      // fail to create
}

// TODO: Delete these three lines if you don\'t want the toolbar to
//  be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);

return 0;
}
 
如果在98下运行,表现的不良现象是第一次运行时,把鼠标移到工具栏上,等 tooltip 出来后移开,关闭程序。然后再次启动程序,再把鼠标移到工具栏上去,over,程序崩溃,有谁知道是怎么回事吗?

全部用 Mfc Appwizard 生成的代码,没有添加任何代码也是这样。
 :(
www.bjjcz.com
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-06-01 19:21
DevParter 提示的错误如下:

Argument 2 in ReleaseDC (HDC__ hdc = 0xCD010D3C) still contains non default/stock objects.

*********************************************************
对应的代码在:Wingdi.cpp

CClientDC::~CClientDC()
{
ASSERT(m_hDC != NULL);
::ReleaseDC(m_hWnd, Detach());
}

ReleaseDC() 出错了

**********************************************************
而导致该 dc 释放的原因是状态栏的 SetIndicators() 使用了一个局部变量 dcScreen.


BOOL CStatusBar::SetIndicators(const UINT* lpIDArray, int nIDCount)
{
ASSERT_VALID(this);
ASSERT(nIDCount >= 1);  // must be at least one of them
ASSERT(lpIDArray == NULL ||
AfxIsValidAddress(lpIDArray, sizeof(UINT) * nIDCount, FALSE));
ASSERT(::IsWindow(m_hWnd));

// first allocate array for panes and copy initial data
if (!AllocElements(nIDCount, sizeof(AFX_STATUSPANE)))
return FALSE;
ASSERT(nIDCount == m_nCount);

// copy initial data from indicator array
BOOL bResult = TRUE;
if (lpIDArray != NULL)
{
HFONT hFont = (HFONT)SendMessage(WM_GETFONT);
CClientDC dcScreen(NULL);
HGDIOBJ hOldFont = NULL;
if (hFont != NULL)
hOldFont = dcScreen.SelectObject(hFont);

AFX_STATUSPANE* pSBP = _GetPanePtr(0);
for (int i = 0; i < nIDCount; i++)
{
pSBP->nID = *lpIDArray++;
pSBP->nFlags |= SBPF_UPDATE;
if (pSBP->nID != 0)
{
if (!pSBP->strText.LoadString(pSBP->nID))
{
TRACE1(\"Warning: failed to load indicator string 0x%04X.\\n\",
pSBP->nID);
bResult = FALSE;
break;
}
pSBP->cxText = dcScreen.GetTextExtent(pSBP->strText).cx;
ASSERT(pSBP->cxText >= 0);
if (!SetPaneText(i, pSBP->strText, FALSE))
{
bResult = FALSE;
break;
}
}
else
{
// no indicator (must access via index)
// default to 1/4 the screen width (first pane is stretchy)
pSBP->cxText = ::GetSystemMetrics(SM_CXSCREEN)/4;
if (i == 0)
pSBP->nStyle |= (SBPS_STRETCH | SBPS_NOBORDERS);
}
++pSBP;
}
if (hOldFont != NULL)
dcScreen.SelectObject(hOldFont);
}
UpdateAllPanes(TRUE, TRUE);

return bResult;
}

www.bjjcz.com
drinkeryj
驱动老牛
驱动老牛
  • 注册日期2001-03-23
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-01 20:11
你最好把整个工程文件都传上来,才好帮你调.
以后怎么办? [img]http://www.driverdevelop.com/forum/upload/Xman/2004-04-05_2004324183110706.jpg[/img]
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2004-06-01 23:42
只要有 vc ,直接用 appwizard 生成一个单文档项目就可以了。
www.bjjcz.com
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2004-06-01 23:44
不过在 w2k 下运行程序不会出错;用 DevParter 查才会提示有错误。 但在 98 下就会出现问题了。不知道是什么原因。
www.bjjcz.com
James.Ji
驱动老牛
驱动老牛
  • 注册日期2001-09-17
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分-9分
  • 威望-8点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-02 09:34
我发现对VC还是没有入门。Devparter是什么?
车到山前必有路。 虽然有些土,却是我最有感触的一句话。
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2004-06-02 11:02
晕,vc 高手难道没有来灌水的吗

把 CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 中ToolBar 相关的代码注释就没有错误了。但到底是什么原因呢?怎么解决呢?

TooBar 里装载了位图资源,到了 StatusBar 的时候就提示上述错误了。好像是 StatusBar 中的局部变量 CClientDC dcScreen(NULL); 与 ToolBar 装载的 DC 是同一个 DC,可是我怎么知道这两个 DC 倒是是不是同一个 DC 呢? 如果是同一个,有什么方法可以解决呢?
www.bjjcz.com
poweruser
驱动老牛
驱动老牛
  • 注册日期2003-02-26
  • 最后登录2008-07-18
  • 粉丝0
  • 关注0
  • 积分652分
  • 威望72点
  • 贡献值0点
  • 好评度64点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-06-02 14:32
有些资源泄漏不用管,象Devpanter或者BoundsChecker都有一些是误报的
还有一些是MFC本身的问题,就算查出来有泄漏也没办法修正,不过这些一般都没什么大碍的

主要的是自己的代码有没有内存泄漏 :P
老虎不发威,你当我是Hello Kitty!
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2004-06-03 08:48
这个我也发现了,每次用 DevParter ,BoundsChecker都是一大堆资源泄漏,但程序运行并无问题。
主要是这次有点奇怪,在 98 下老遇到这个问题(上面所述),把鼠标移到工具栏上程序就崩溃了,所以想彻底查一下。
关键是用 VC AppWizard 直接生成的单文档模版应用程序,不做任何修改,也存在上述问题。先运行,把鼠标移到工具栏上,等出现 tooltip 后移开,关闭程序。然后再次运行,再把鼠标移到工具栏上就死了。
用 DevParter ,BoundsChecker 看的话正好提示工具栏那段代码是产生错误的原因。所以我想还是有原因的。

现在不清楚到底是98的问题,还是 vc 的问题。我想这种想象应该不止我一个人遇到过,所以想问一下。 :(
www.bjjcz.com
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2004-06-04 15:05
5555555555555555555555555

玩 vc 的难道没有潜水的吗?
www.bjjcz.com
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2004-06-04 15:09

怎么贴图?


[编辑 -  6/4/04 by  lvwj]
www.bjjcz.com
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2004-06-04 23:39

看来真地很少人遇见这种问题 :(
www.bjjcz.com
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2004-06-05 13:28
装VC的SP6看看?
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2004-06-05 14:16
今天刚下下来装上,好像不起作用,真是晕倒
www.bjjcz.com
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2004-06-05 14:18
呵呵,这几天一直在看书找相关资料,还没有找到  :(
不知道设备上下文使用时的具体限制条件是什么,为什么微软提供的 ToolBar 不按自己的规矩设计,而让 Devparter 不停的报错。
www.bjjcz.com
zweiwan
驱动牛犊
驱动牛犊
  • 注册日期2001-07-12
  • 最后登录2005-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-06-06 22:48
用vs.net2003会不会有同样的问题呢?现在很少用VC6了,它的IDE好几次无故把源文件弄丢了。devpartner好长时间没用了,不知道现在的版本好不好使。现在我一般用purify plus 测内存泄漏,程序性能。

[编辑 -  6/6/04 by  zweiwan]
jec017
驱动太牛
驱动太牛
  • 注册日期2002-08-22
  • 最后登录2008-01-09
  • 粉丝0
  • 关注0
  • 积分91分
  • 威望10点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-06-07 13:03
我发现对VC还是没有入门。Devparter是什么?
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
17楼#
发布于:2004-06-07 16:18
Devparter是什么

软件除错、性能分析工具。
看看论坛主页上郎维公司销售的软件说明。
www.bjjcz.com
poweruser
驱动老牛
驱动老牛
  • 注册日期2003-02-26
  • 最后登录2008-07-18
  • 粉丝0
  • 关注0
  • 积分652分
  • 威望72点
  • 贡献值0点
  • 好评度64点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-06-08 09:03
用vs.net2003会不会有同样的问题呢?现在很少用VC6了,它的IDE好几次无故把源文件弄丢了。devpartner好长时间没用了,不知道现在的版本好不好使。现在我一般用purify plus 测内存泄漏,程序性能。

[编辑 -  6/6/04 by  zweiwan]


你是不是装了诺顿?其实应该不是VC的IDE的问题,装了诺顿有时会把源文件弄丢,尤其是当你按CTRL+S保存的时候
有一次保存后编译不通了,怎么也找不到问题,后来仔细一看原来是把两个文件给拼到一个文件中了,一个保留了前半部分,一个保留了后半部分!:mad: :mad:
不过已经很久不用诺顿了 :P
老虎不发威,你当我是Hello Kitty!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
19楼#
发布于:2004-06-08 11:58
[quote]用vs.net2003会不会有同样的问题呢?现在很少用VC6了,它的IDE好几次无故把源文件弄丢了。devpartner好长时间没用了,不知道现在的版本好不好使。现在我一般用purify plus 测内存泄漏,程序性能。

[编辑 -  6/6/04 by  zweiwan]


你是不是装了诺顿?其实应该不是VC的IDE的问题,装了诺顿有时会把源文件弄丢,尤其是当你按CTRL+S保存的时候
有一次保存后编译不通了,怎么也找不到问题,后来仔细一看原来是把两个文件给拼到一个文件中了,一个保留了前半部分,一个保留了后半部分!:mad: :mad:
不过已经很久不用诺顿了 :P  [/quote]
VC6的bug,SP6改了
上一页
游客

返回顶部