关于VC转2010问题和Debug Assertion的问题!

xiaoyang0911 2016-11-04 02:38:39
前提是这个程序是在VC6.0上开发的,现在电脑上安装了6.0也可以运行这个程序,但是现在想把这个程序在VS2010上实现运行,但是却出现Debug Assertion Failed的提示如图所示:

我看到网上有的说看Debug窗口里的Trace信息
而我的信息是这样的
“Xxxx.exe”: 已加载“C:\Users\xxxxxx\Desktop\程序\Debug\Xxxx.exe”,已加载符号。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\ntdll.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\kernel32.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\KernelBase.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\opengl32.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\msvcrt.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\advapi32.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\sechost.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\rpcrt4.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\sspicli.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\cryptbase.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\gdi32.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\user32.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\lpk.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\usp10.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\glu32.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\ddraw.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\dciman32.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\setupapi.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\cfgmgr32.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\oleaut32.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\ole32.dll”,已加载符号。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\devobj.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\dwmapi.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Users\xxxxx\Desktop\程序\Debug\HjyPlatUtil.dll”,未使用调试信息生成二进制文件。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\mfc42.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\odbc32.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Users\xxxxx\Desktop\程序\Debug\IEUCap.dll”,未使用调试信息生成二进制文件。
“Xxxx.exe”: 已加载“C:\Users\xxxxx\Desktop\程序\Debug\Raw2Rgb.dll”,未使用调试信息生成二进制文件。
“Xxxx.exe”: 已加载“C:\Users\xxxxx\Desktop\程序\Debug\DrawUtil.dll”,未使用调试信息生成二进制文件。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\mfc100d.dll”,已加载符号。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\msvcr100d.dll”,已加载符号。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\shlwapi.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.17514_none_ec83dffa859149af\comctl32.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\msimg32.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\ws2_32.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\nsi.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\msvcp100d.dll”,已加载符号。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\imm32.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\msctf.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\odbcint.dll”,未使用调试信息生成二进制文件。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\uxtheme.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\mfc100chs.dll”,未使用调试信息生成二进制文件。
Warning: Resource items and Win32 Z-order lists are out of sync. Tab order may be not defined well.
“Xxxx.exe”: 已加载“C:\Users\xxxxx\AppData\Roaming\TaobaoProtect\TaobaoProtectSE.dll”,Cannot find or open the PDB file
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\psapi.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\crypt32.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\msasn1.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\version.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\sfc.dll”,已加载符号(去除源信息)。
“Xxxx.exe”: 已加载“C:\Windows\SysWOW64\sfc_os.dll”,已加载符号(去除源信息)。
Xxxx.exe 已触发了一个断点
Warning: Resource items and Win32 Z-order lists are out of sync. Tab order may be not defined well.
Xxxx.exe 已触发了一个断点
Warning: Resource items and Win32 Z-order lists are out of sync. Tab order may be not defined well.
Xxxx.exe 已触发了一个断点
Warning: Resource items and Win32 Z-order lists are out of sync. Tab order may be not defined well.
线程 '_RtlpExtendedHeapInformationWorkerThread@4' (0x1330) 已退出,返回值为 0 (0x0)。
Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occcont.cpp(922) : {594} normal block at 0x00C2D778, 12 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occcont.cpp(922) : {593} normal block at 0x00C2D730, 12 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occcont.cpp(922) : {592} normal block at 0x00C2D6E8, 12 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occcont.cpp(922) : {588} normal block at 0x00C2B898, 12 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp(143) : {587} client block at 0x00C2B7D8, subtype c0, 128 bytes long.
a CCmdTarget object at $00C2B7D8, 128 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {586} normal block at 0x00C2B768, 49 bytes long.
Data: <T _X > 54 CD 5F 58 04 00 00 00 20 00 00 00 01 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp(195) : {585} normal block at 0x00C2B508, 544 bytes long.
Data: < > 0A 04 00 00 00 00 00 00 EC 03 00 00 00 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp(181) : {584} normal block at 0x00C2B3B8, 276 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c:\users\xxxxx\desktop\程序\Xxxxview.cpp(105) : {580} client block at 0x00C2A838, subtype c0, 2416 bytes long.
a CDialog object at $00C2A838, 2416 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {579} normal block at 0x00C2A780, 124 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 B8 A6 C2 00
c:\users\xxxxx\desktop\程序\Xxxxview.cpp(19) : {578} client block at 0x00C2A6B8, subtype c0, 136 bytes long.
a CXxxxView object at $00C2A6B8, 136 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {574} normal block at 0x00C2A490, 22 bytes long.
Data: <T _X > 54 CD 5F 58 05 00 00 00 05 00 00 00 01 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {573} normal block at 0x00C2A438, 22 bytes long.
Data: <T _X > 54 CD 5F 58 05 00 00 00 05 00 00 00 01 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {572} normal block at 0x00C2A3B8, 61 bytes long.
Data: <T _X, , > 54 CD 5F 58 2C 00 00 00 2C 00 00 00 01 00 00 00
c:\users\xxxxx\desktop\程序\mainfrm.cpp(21) : {571} client block at 0x00C2A018, subtype c0, 868 bytes long.
a CMainFrame object at $00C2A018, 868 bytes long
c:\users\xxxxx\desktop\程序\Xxxxdoc.cpp(18) : {570} client block at 0x00C29F00, subtype c0, 216 bytes long.
a CXxxxDoc object at $00C29F00, 216 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {569} normal block at 0x00C29E48, 124 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 A0 9C C2 00
{568} client block at 0x00C29DE8, subtype c0, 32 bytes long.
a CDocManager object at $00C29DE8, 32 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {567} normal block at 0x00C29D68, 61 bytes long.
Data: <T _X, , > 54 CD 5F 58 2C 00 00 00 2C 00 00 00 01 00 00 00
c:\users\xxxxx\desktop\程序\Xxxx.cpp(85) : {566} client block at 0x00C29CA0, subtype c0, 140 bytes long.
a CSingleDocTemplate object at $00C29CA0, 140 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {564} normal block at 0x00C29C48, 23 bytes long.
Data: <T _X > 54 CD 5F 58 06 00 00 00 06 00 00 00 01 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {563} normal block at 0x00C29BE8, 33 bytes long.
Data: <T _X > 54 CD 5F 58 10 00 00 00 10 00 00 00 01 00 00 00
{562} normal block at 0x00C29B98, 20 bytes long.
Data: < h _Xh _Xh _X> 04 00 00 00 68 CD 5F 58 68 CD 5F 58 68 CD 5F 58
{561} normal block at 0x00C29B38, 32 bytes long.
Data: <h3 X > 68 33 12 58 04 00 00 00 9C 9B C2 00 F8 9B C2 00
Object dump complete.
程序“[4008] Xxxx.exe: 本机”已退出,返回值为 3 (0x3)。
我这里也没有提示说是什么控件的原因啊?那问题出在哪里啊?
上图如果点击重试的时候出现XXX.exe触发一个断点,点中断后指向这里

刚开始接触这方面,大神勿喷。求给个方向
主函数 或者需要其他的函数一会提出来
小弟在此谢过了!!!
...全文
422 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-11-09
  • 打赏
  • 举报
回复
在64位Windows下: 64位exe和dll在目录c:\windows\system32目录下; 32位exe和dll在目录c:\windows\syswow64目录下; 所以要注意: 在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。 且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
jzp_1981 2016-11-09
  • 打赏
  • 举报
回复
推荐你看一下: http://bbs.csdn.net/topics/370249473 6与2010区别还是很大的,简单的升级解决方案可能根本就解决不了问题。
lx624909677 2016-11-08
  • 打赏
  • 举报
回复
在堆栈调用中找到自己的代码,然后定位到自己的代码那里,查看一下断的地方的相关的变量的值是不是有问题
xiaoyang0911 2016-11-08
  • 打赏
  • 举报
回复
引用
从调用堆栈看 MScomm 控件问题的可能性比较大
这个我在电脑上安装了VC6.0和VS2010,在6.0上可以实现,但是到了VS2010上就不能实现了。控件我也试过了,那这种情况怎么办呢,要不我把程序发给你。
zgl7903 2016-11-08
  • 打赏
  • 举报
回复
从调用堆栈看 MScomm 控件问题的可能性比较大
xiaoyang0911 2016-11-08
  • 打赏
  • 举报
回复
引用
点击重试调试, 结合调用堆栈解决
可能是用到的控件没有注册 或者设置可能有冲突

我不是学这方面的,但是现在需要这个程序实现出来还请大神指点下
下面是调用堆栈里面的信息:
zgl7903 2016-11-04
  • 打赏
  • 举报
回复
点击重试调试, 结合调用堆栈解决 可能是用到的控件没有注册 或者设置可能有冲突
xiaoyang0911 2016-11-04
  • 打赏
  • 举报
回复
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "Robot.h"

#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//#include "CaptureDirectShow.h"
//CCaptureDirectShow gl_cap3;

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

// 状态栏的间隔符
static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_SEPARATOR,
	ID_SEPARATOR,
	ID_SEPARATOR,
	ID_SEPARATOR,
	ID_SEPARATOR,
//	ID_INDICATOR_CAPS,
//	ID_INDICATOR_NUM,
//	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
}

CMainFrame::~CMainFrame()
{
}

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 (!this->CreateExToolBar())
		return -1; // 如果工具条创建不成功,则程序返回。

	// 创建状态栏
	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
	}
	m_wndStatusBar.SetPaneInfo(1,0,0,200);
	m_wndStatusBar.SetPaneInfo(2,0,0,100);
	m_wndStatusBar.SetPaneInfo(3,0,0,80);
	m_wndStatusBar.SetPaneInfo(4,0,0,80);
//	m_wndStatusBar.SetPaneStyle(1,SBPS_POPOUT);
//	((CMainFrame *)AfxGetMainWnd())->m_wndStatusBar.SetPaneText(2,strLocation);

	// 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);
//	ShowWindow(SW_SHOWMAXIMIZED);

	// 得到当前时间,显示在状态栏中
	CString strTime, strDate;
	CTime time = CTime::GetCurrentTime();//得到当前时间
	strTime = time.Format("%X");//时间格式化
	strDate = time.Format("%Y-%m-%d");//日期格式化
	m_wndStatusBar.SetPaneText(3, strDate);
	m_wndStatusBar.SetPaneText(4, strTime);
	m_wndStatusBar.SetPaneText(5, "大连交大机器人实验教学平台");
//	m_wndStatusBar.SetPaneStyle(2, SBPS_DISABLED);
	SetTimer(ID_TIMER_STATUS, 1000, NULL);

	// 设置窗口的位置
	SetWindowPos(NULL, -4, -4, 1032, 748, SWP_SHOWWINDOW); // | SWP_NOSIZE
	return 0;
}

void CMainFrame::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default

	// 对状态栏的时间进行实时更新
	if (nIDEvent == ID_TIMER_STATUS)
	{
		CString strTime,strDate;
		CTime time=CTime::GetCurrentTime(); //得到当前时间
		strTime=time.Format("%X"); //时间格式化
		m_wndStatusBar.SetPaneText(4,strTime);
	}

	CFrameWnd::OnTimer(nIDEvent);
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers

// 创建工具条
BOOL CMainFrame::CreateExToolBar()
{
	CImageList img;
	CString str;
	
	if(!m_wndReBar.Create(this))
	{
		return -1;
	}
	
	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC))
	{
		return -1;      
	}
	
	//下面的代码是设置按钮的宽度和长度
	m_wndToolBar.GetToolBarCtrl().SetButtonWidth(60, 80);
//	m_wndToolBar.SetHeight(25);

	//下面的代码是设置"热"的位图
	img.Create(34, 34, ILC_COLOR8|ILC_MASK,2,2);
	img.SetBkColor(::GetSysColor(COLOR_BTNFACE));

	img.Add(AfxGetApp()->LoadIcon(IDI_ICON_PATHDLG));	//0轨迹窗口
    img.Add(AfxGetApp()->LoadIcon(IDI_ICON_VISIONDLG));	//1视觉窗口
	img.Add(AfxGetApp()->LoadIcon(IDI_ICON_OPEN));		//2打开
	img.Add(AfxGetApp()->LoadIcon(IDI_ICON_SAVE));		//3保存
	img.Add(AfxGetApp()->LoadIcon(IDI_ICON_RESET));		//4复位
	img.Add(AfxGetApp()->LoadIcon(IDR_MAINFRAME));		//5关于
	img.Add(AfxGetApp()->LoadIcon(IDI_ICON_EXIT));		//6退出
	
	m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
	img.Detach();
	
	//下面的代码是设置"冷"的位图
	img.Create(32, 32, ILC_COLOR8|ILC_MASK, 2,2);
	img.SetBkColor(::GetSysColor(COLOR_BTNFACE));

	img.Add(AfxGetApp()->LoadIcon(IDI_ICON_PATHDLG));	//0轨迹窗口
    img.Add(AfxGetApp()->LoadIcon(IDI_ICON_VISIONDLG));	//1视觉窗口
	img.Add(AfxGetApp()->LoadIcon(IDI_ICON_OPEN));		//2打开
	img.Add(AfxGetApp()->LoadIcon(IDI_ICON_SAVE));		//3保存
	img.Add(AfxGetApp()->LoadIcon(IDI_ICON_RESET));		//4复位
	img.Add(AfxGetApp()->LoadIcon(IDR_MAINFRAME));		//5关于
	img.Add(AfxGetApp()->LoadIcon(IDI_ICON_EXIT));		//6退出

	m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
	img.Detach();
	
	//改变属性
	m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT |CBRS_TOOLTIPS | TBSTYLE_TRANSPARENT |
									TBBS_CHECKBOX );
	m_wndToolBar.SetButtons(NULL,9);	
	// set up each toolbar button设置文字  
	
	m_wndToolBar.SetButtonInfo(0, ID_MENU_PATHDLG, TBBS_CHECKBOX, 0); // TBBS_CHECKBOX
	m_wndToolBar.SetButtonText(0, "轨迹窗口");	
	
	m_wndToolBar.SetButtonInfo(1, ID_MENU_VISIONDLG, TBBS_CHECKBOX, 1);
	m_wndToolBar.SetButtonText(1, "视觉窗口");

	m_wndToolBar.SetButtonInfo(2, ID_SEPARATOR, TBBS_SEPARATOR, 1);

	m_wndToolBar.SetButtonInfo(3, ID_MENU_FILEOPEN, TBSTYLE_BUTTON, 2);
	m_wndToolBar.SetButtonText(3, "打开");

	m_wndToolBar.SetButtonInfo(4, ID_MENU_FILESAVE, TBSTYLE_BUTTON, 3);
	m_wndToolBar.SetButtonText(4, "保存");

	m_wndToolBar.SetButtonInfo(5, ID_MENU_RESET, TBSTYLE_BUTTON, 4);
	m_wndToolBar.SetButtonText(5, "复位");
	
	m_wndToolBar.SetButtonInfo(6, ID_SEPARATOR, TBBS_SEPARATOR, 1);

	m_wndToolBar.SetButtonInfo(7, ID_APP_ABOUT, TBSTYLE_BUTTON, 5);
	m_wndToolBar.SetButtonText(7, "关于");	
	
	m_wndToolBar.SetButtonInfo(8,ID_APP_EXIT,TBSTYLE_BUTTON,6);
	m_wndToolBar.SetButtonText(8,"退出");
	
	CRect rectToolBar;
	//得到按钮的大小
	m_wndToolBar.GetItemRect(0, &rectToolBar);
	//设置按钮的大小
	m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(33,33));//+CSize(0,3)
	
	//在Rebar中加入ToolBar
	m_wndReBar.AddBar(&m_wndToolBar);	
/*	//改变一些属性
	REBARBANDINFO rbbi;
	rbbi.cbSize = sizeof(rbbi);		//这个是必须填
	rbbi.fMask = RBBIM_CHILDSIZE | RBBIM_IDEALSIZE | RBBIM_SIZE|RBBIM_BACKGROUND;
	//工具条的宽度
	rbbi.cxMinChild = rectToolBar.Width();
	//高度
	rbbi.cyMinChild = rectToolBar.Height();
	//下面这行代码是为工具条加入背景位图,请注意上rbbi.fMask中RBBIM_BACKGROUND标志
//	rbbi.hbmBack = LoadBitmap(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_TOOLBARBKMAP));
	rbbi.cx = rbbi.cxIdeal = rectToolBar.Width() * 10;	
	m_wndReBar.GetReBarCtrl().SetBandInfo(0, &rbbi);
*/

//	m_wndToolBar.GetToolBarCtrl().EnableButton(ID_MENU_FILEOPEN,FALSE);
//	m_wndToolBar.RedrawWindow();
	return TRUE;
}
关于龙书第13章地形绘制的terrain项目运行出错问题 (注:龙书即:《DirectX9.0 3D游戏开发编程基础》) 在学习该教材时,当我们试着编译并运行13章地形绘制的terrain项目时,发现运行出错,并弹出了一个出错提示窗口,提示我们::访问vector 越界了 提示窗口的内容如下: -------------------------------------------------------------------- Microsoft Visual C++ Debug Library Debug Assertion failed! Program:...cuments and Settings\Administrator\Terrain\Debug\Terrain.exe File: d:\microsoft visual studio 10.0\vc\include\vector Line:932 Expression : vector subscript out of range For information on how your program can cause an assertion Failure , see the Visual C++ documentation on asserts. (Press Retry to debug the application) [终止(A)] [重试(R)] [忽略(I)] ---------------------------------------------------------------------------------- 问题主要出现在terrain.cpp 文件中的几个函数内部传递参数最终作为了vector的索引值,得到的索引值没有经过限定,导致超出了vector的界限-----最终访问越界. 修改的地方在下面这几处: 在terrain.cpp文档里搜索”//修改过!!!” bool Terrain::genTexture(D3DXVECTOR3* directionToLight) float Terrain::computeShade(int cellRow, int cellCol, D3DXVECTOR3* directionToLight) float Terrain::getHeight(float x, float z) 在terrain.cpp文档里搜索”//注意这里!!!” /int Terrain::getHeightmapEntry(int row, int col) bool Terrain::lightTerrain(D3DXVECTOR3* directionToLight) 在terrainDriver.cpp文档里搜索”//注意这里!!!” float height = TheTerrain->getHeight( pos.x, pos.z ); 我的修改主要是通过在传递索引值的地方,限定索引值的范围,这样就避免了vector访问越界,这也是龙书作者在写该13章的代码时一时所忽略掉的. 只修改过terrain.cpp文件中的内容,其他的都没动.所以可以只将terrain.cpp拷贝到工程中替换掉原来的就可以了.

16,472

社区成员

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

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

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