VC++6.0 Linking卡住问题的解决过程

之前在学C语言时遇到过的问题。

安装好VC6.0,在编译时出现怪现象,情况如下:   

点击Build(F7)按钮;完成了compile之后,卡在Linking.....处,VC将一系列的菜单及工具条按钮禁止,不再有任何反应。此时如果关闭VC,则出现错误提示“You can not close workspace while a build is in porgress,Select the Stop Build command before closing the workspace”,确定后VC仍然不能关闭,只能用Ctrl+Alt+Del强行终止MSDEV.EXE,才能退出关闭VC++6.0。   

遇到此问题后使用此方法成功解决:

最后到google里面搜索关键字“VC 编译不能完成”,得到一个csdn社区的提问贴,楼主遇到的问题,和我现在遇到的问题一模一样。网址如下:http://topic.csdn.net/t/20031210/15/2548907.html

里面有一个高手提示:windows系统不稳定时也会造成这种现象link时卡住,最好打一下sp补丁。由于程序是一定没有错误的,就下面几行:

#include

main()

{

printf("This is my first C++ program\n");

}

所以我也深信,是VC++和Windows系统的稳定性问题,Windows打补丁是三天两夜的事情,见多不怪了,于是立即到microsoft官方网去下载了Sp6补丁,网址如下:http://download.microsoft.com/download/1/9/f/19fe4660-5792-4683-99e0-8d48c22eed74/Vs6sp6.exe

下载并安装VcSp6补丁后,再次启动VC++6.0,打开原来的工程,按build键,compile完成之后,Linking也可顺利完成。至此,VC++6.0 Linking 卡住问题得到解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
以下是使用MFC和VC++6.0实现的代码: ``` #include "stdafx.h" #include "BezierBsplines.h" #include "math.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define MAX_CONTROL_POINTS 4 #define MAX_CURVE_POINTS 200 #define BEZIER_CURVE 0 #define BSPLINE_CURVE 1 ///////////////////////////////////////////////////////////////////////////// // CBezierBsplinesApp BEGIN_MESSAGE_MAP(CBezierBsplinesApp, CWinApp) //{{AFX_MSG_MAP(CBezierBsplinesApp) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code ! ON_COMMAND(ID_HELP, CWinApp::OnHelp) ON_WM_LBUTTONDOWN() ON_WM_RBUTTONDOWN() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CBezierBsplinesApp construction CBezierBsplinesApp::CBezierBsplinesApp() { // TODO: add construction code here, // Place all significant initialization in InitInstance } ///////////////////////////////////////////////////////////////////////////// // The one and only CBezierBsplinesApp object CBezierBsplinesApp theApp; ///////////////////////////////////////////////////////////////////////////// // CBezierBsplinesApp initialization BOOL CBezierBsplinesApp::InitInstance() { // Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need. #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif CBezierBsplinesDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: Place code here to handle when the dialog is // dismissed with OK } else if (nResponse == IDCANCEL) { // TODO: Place code here to handle when the dialog is // dismissed with Cancel } // Since the dialog has been closed, return FALSE so that we exit the // application, rather than start the application's message pump. return FALSE; } void CBezierBsplinesApp::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default static int curPoint = 0; if (curPoint < MAX_CONTROL_POINTS) { m_controlPoints[curPoint++] = point; DrawControlPoints(); } CWinApp::OnLButtonDown(nFlags, point); } void CBezierBsplinesApp::DrawControlPoints() { // Draw all control points CClientDC dc(m_pMainWnd); CBrush brush; brush.CreateSolidBrush(RGB(0, 0, 255)); CBrush* pOldBrush = dc.SelectObject(&brush); for (int i = 0; i < MAX_CONTROL_POINTS; i++) { dc.Ellipse(m_controlPoints[i].x - 2, m_controlPoints[i].y - 2, m_controlPoints[i].x + 2, m_controlPoints[i].y + 2); } dc.SelectObject(pOldBrush); // Draw control lines CPen pen; pen.CreatePen(PS_SOLID, 1, RGB(0, 255, 0)); CPen* pOldPen = dc.SelectObject(&pen); dc.MoveTo(m_controlPoints[0]); for (int i = 1; i < MAX_CONTROL_POINTS; i++) { dc.LineTo(m_controlPoints[i]); } dc.SelectObject(pOldPen); } void CBezierBsplinesApp::OnRButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default static int curveType = BEZIER_CURVE; if (curveType == BEZIER_CURVE) { DrawBezierCurve(); } else if (curveType == BSPLINE_CURVE) { DrawBSplineCurve(); } curveType = (curveType + 1) % 2; CWinApp::OnRButtonDown(nFlags, point); } void CBezierBsplinesApp::DrawBezierCurve() { // Draw Bezier curve CClientDC dc(m_pMainWnd); CPen pen; pen.CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); CPen* pOldPen = dc.SelectObject(&pen); for (int i = 0; i < MAX_CURVE_POINTS; i++) { double t = (double)i / (MAX_CURVE_POINTS - 1); CPoint pt = CalculateBezierPoint(t); if (i == 0) { dc.MoveTo(pt); } else { dc.LineTo(pt); } } dc.SelectObject(pOldPen); } void CBezierBsplinesApp::DrawBSplineCurve() { // Draw B-spline curve CClientDC dc(m_pMainWnd); CPen pen; pen.CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); CPen* pOldPen = dc.SelectObject(&pen); for (int i = 0; i < MAX_CURVE_POINTS; i++) { double t = (double)i / (MAX_CURVE_POINTS - 1); CPoint pt = CalculateBSplinePoint(t); if (i == 0) { dc.MoveTo(pt); } else { dc.LineTo(pt); } } dc.SelectObject(pOldPen); } CPoint CBezierBsplinesApp::CalculateBezierPoint(double t) { // Calculate Bezier point CPoint pt; pt.x = (int)(pow(1 - t, 3) * m_controlPoints[0].x + 3 * t * pow(1 - t, 2) * m_controlPoints[1].x + 3 * pow(t, 2) * (1 - t) * m_controlPoints[2].x + pow(t, 3) * m_controlPoints[3].x); pt.y = (int)(pow(1 - t, 3) * m_controlPoints[0].y + 3 * t * pow(1 - t, 2) * m_controlPoints[1].y + 3 * pow(t, 2) * (1 - t) * m_controlPoints[2].y + pow(t, 3) * m_controlPoints[3].y); return pt; } CPoint CBezierBsplinesApp::CalculateBSplinePoint(double t) { // Calculate B-spline point CPoint pt; double b0 = pow(1 - t, 3) / 6; double b1 = (3 * pow(t, 3) - 6 * pow(t, 2) + 4) / 6; double b2 = (-3 * pow(t, 3) + 3 * pow(t, 2) + 3 * t + 1) / 6; double b3 = pow(t, 3) / 6; pt.x = (int)(b0 * m_controlPoints[0].x + b1 * m_controlPoints[1].x + b2 * m_controlPoints[2].x + b3 * m_controlPoints[3].x); pt.y = (int)(b0 * m_controlPoints[0].y + b1 * m_controlPoints[1].y + b2 * m_controlPoints[2].y + b3 * m_controlPoints[3].y); return pt; } ``` 这里的`CBezierBsplinesDlg`是使用MFC的对话框类,可以使用Visual Studio创建。 在对话框类的`OnInitDialog()`函数中,我们可以添加以下代码: ``` // Initialize control points m_controlPoints[0] = CPoint(100, 100); m_controlPoints[1] = CPoint(150, 200); m_controlPoints[2] = CPoint(250, 200); m_controlPoints[3] = CPoint(300, 100); // Draw control points DrawControlPoints(); ``` 这里我们初始化了四个控制点,并且调用`DrawControlPoints()`函数绘制控制点和控制线。 在`OnLButtonDown()`函数中,我们处理鼠标左键按下事件,如果当前控制点数量小于4,则将当前鼠标位置作为一个新的控制点,并调用`DrawControlPoints()`函数重新绘制控制点和控制线。 在`OnRButtonDown()`函数中,我们处理鼠标右键按下事件,根据当前曲线类型(Bezier曲线或B样条曲线),调用对应的函数`DrawBezierCurve()`或`DrawBSplineCurve()`绘制曲线,并将曲线类型切换为下一个类型。 在`DrawBezierCurve()`和`DrawBSplineCurve()`函数中,我们分别使用`CalculateBezierPoint()`和`CalculateBSplinePoint()`函数计算曲线上的点,并使用`CClientDC`和`CPen`绘制曲线。 在`CalculateBezierPoint()`函数中,我们使用Bezier曲线的公式计算曲线上的点。 在`CalculateBSplinePoint()`函数中,我们使用B样条曲线的公式计算曲线上的点。 最后,我们在`CBezierBsplinesApp`类中定义了`m_controlPoints`数组存储四个控制点,在`DrawControlPoints()`函数中绘制控制点和控制线,在`CalculateBezierPoint()`函数和`CalculateBSplinePoint()`函数中计算曲线上的点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值