龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

使用VC开发程序经验谈(二 续)(4)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
至此,几何元素对象类实现完成,可以在主程序中进行测试: void CShapeView::OnDraw(CDC* pDC) { CShapeDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); { CShape Shape; CMyArc *pArc=
      至此,几何元素对象类实现完成,可以在主程序中进行测试:

void CShapeView::OnDraw(CDC* pDC)

{

         CShapeDoc* pDoc = GetDocument();

         ASSERT_VALID(pDoc);

         {

                  CShape Shape;

                  CMyArc *pArc=new CMyArc(CMyXYZ(100,100,0),CMyXYZ(100,20,0),CMyXYZ(180,100,0));

                  Shape.m_List.insert(Shape.m_List.end(),pArc);

                  CMyPolyLn *pPolyln=new CMyPolyLn;

                  CMyXYZ xyz(1,1,0);

                  pPolyln->AddPoint(&xyz);

                  xyz.x=2;

                  xyz.y=2;

                  pPolyln->AddPoint(&xyz);

                  xyz.x=2;

                  xyz.y=1;

                  pPolyln->AddPoint(&xyz);

                  Shape.m_List.insert(Shape.m_List.end(),pPolyln);

                  Shape.Draw((long)pDC->m_hDC);

         }

}

       先不要急着运行,现在运行的话会出现一些断言的错误,这是由于你在主程序中new出来空间,而在DLL中释放而造成的(CShape的析构函数在DLL中释放内存),解决该问题的方法详细说明如下: 

  用GlobalAlloc()代替new, 用GlobalFree() 代替delete就不会出错了

    其实还有一个办法,就是把dll的Settings的C/C++选项卡的Code Generation的Use Run-time liberary改成Debug Multithreaded DLL,在Release版本中改成Multithreaded DLL,就可以直接使用new和delete了,没问题

    比较规范点的做法一般是DLL分配的内存由DLL释放。 

  这里采用设置Debug Multithreaded DLL的方法解决

精彩图集

赞助商链接