vc资料连载(一)

在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有: 
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main 
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16 
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex 
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex 


下面介绍解决的方法: 
1. Windows子系统设置错误, 提示: 
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main 
Windows项目要使用Windows子系统, 而不是Console, 可以这样设置: 
[Project] --> [Settings] --> 选择"Link"属性页, 
在Project Options中将/subsystem:console改成/subsystem:windows 


2. Console子系统设置错误, 提示: 
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 
控制台项目要使用Console子系统, 而不是Windows, 设置: 
[Project] --> [Settings] --> 选择"Link"属性页, 
在Project Options中将/subsystem:windows改成/subsystem:console 


3. 程序入口设置错误, 提示: 
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16 
通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口: 
[Project] --> [Settings] --> 选择"C/C++"属性页, 
在Category中选择Output, 
再在Entry-point symbol中填入wWinMainCRTStartup, 即可 


4. 线程运行时库设置错误, 提示: 
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex 
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex 
这是因为MFC要使用多线程时库, 需要更改设置: 
[Project] --> [Settings] --> 选择"C/C++"属性页, 
在Category中选择Code Generation, 
再在Use run-time library中选择Debug Multithreaded或者multithreaded 
其中, 
Single-Threaded 单线程静态链接库(release版本) 
Multithreaded 多线程静态链接库(release版本) 
multithreaded DLL 多线程动态链接库(release版本) 
Debug Single-Threaded 单线程静态链接库(debug版本) 
Debug Multithreaded 多线程静态链接库(debug版本) 
Debug Multithreaded DLL 多线程动态链接库(debug版本) 
单线程: 不需要多线程调用时, 多用在DOS环境下 
多线程: 可以并发运行 
静态库: 直接将库与程序Link, 可以脱离MFC库运行 
动态库: 需要相应的DLL动态库, 程序才能运行 
release版本: 正式发布时使用 
debug版本: 调试阶段使用

 [02]

Q:setup was unable to create a DCOM

     user account in order to register microsoft visual

    Studio/common/tools/vs_ent98/valec.exe提示安装不成功!怎么办?

A:这是Visual Studio的一个BUG,如果你不使用Visual Studio Analyzer,可以在安装
时选择Custom,然后在Enterprise Tools中清除掉Visual Studio Analyzer。再安装就
没有这个

问题了。

    如果一定要使用Visual Studio Analyzer,可以在安装后在进行配置工作,

    参考微软的Knowledge Base的文章:“Q257413 BUG: Visual Studio "Setup

    Was Unable to Not Create a DCOM User A”。

[03]

Q:安装VC后,如何禁止对错误网页的调试?

A:从IE菜单,工具->internet选项->选择高级标签

    把里面的"禁止脚本调试"选中就可以了.

[04]

Q: Error spawning cl.exe

A:程序给出提示是说编译的时候找不到CL.EXE这个程序。这主要是VC编译环境

    未设置好造成的。一定是你在安装完VC后又移动了VC的安装目录。可以在VC

    中重新设计:Tools->Options...打开Options对话框,选中Directories选

    项卡,其中有一个Show directiories for下拉列表框,选中Include files

    。然后在下面设置正确的包含文件目录。CL.exe默认所在的目录为

    C:/MICROSOFT VISUAL STUDIO/VC98/INCLUDE.

[05]

Q:VC6对类成员的智能提示功能很有用,但有时候失灵?

A:你可以先关掉项目,将.clw和.ncb删掉,然后重新打开项目,点击菜单

    项View->ClassWizard,在弹出的对话框中按一下“Add All”按钮;重

    新Rebuild All。应该可以解决问题

[06]

Q:如何给已有的Project改名字?

A:将该Project关掉。然后以文本格式打开.dsp文件,替换原来

    的Project名字即可。

    这个操作有一定的危险,建议有经验的网友使用。

    一般也可以使用工具修改,百度之。

[07]

Q:VC工作区的classview内怎么经常丢“类”?当建立一个新的类后,原来

    的类为何就不见了?

A:删除clw文件,重新建立一下就可以了

[08]

Q:fatal error C1010: unexpected end of file while looking for

    precompiled header directive该如何解决

A:如果发生错误的文件是由其他的C代码文件添加进入当前工程而引起的,则

    Alt+F7进入当前工程的Settings,选择C/C++选项卡,从Category组合框中

    选中Precompiled Headers,选择Not Using Precompiled headers。确定

    如果发生错误的文件原本是该工程中的,则检查该文件头部有没有

    #include "stdafx.h"语句,没有的话添加。

    如果还不行,也有可能是定义的类或结构体等最后忘了加分号,注意一下

[09]

Q:以前安装过VC,卸载后重新安装不成功怎么办

A:基本上有三个办法解决:

    1>.重新安装系统,然后在全新安装VC。

    2>.使用绿色免安装版的VC,在版面ftp可以下载。

    3>.清除注册表中的vc安装时生成的项,可以手工清除,也可以借助于超级兔子,优
化大师等工具。

[10]

Q:请推荐几个学习VC的站点

A:http://www.csdn.net                   http://www.codeguru.com

http://www.vccode.com                 http://www.codeproject.com

http://www.vckbase.com                http://www.vchelp.net

[11]

Q:Cannot acess the ClassView

A:将工程文件的只读属性去掉

[12]

Q:ClassView中少了某些类

A:这是Visual Studio的一个BUG,把ncb文件删掉重新打开工程

[13]

Q:代码无误,但不出现提示

A:把ncb文件删掉重新打开工程

[14]

Q:出现C1033 fatal error:Cannot Open programe database xxxxxx.pdb

A:重新编译选Rebuild All

[15]

Q:推荐书籍

A:《VC++技术内幕(第四版)》(Inside Visual C++ 4.0) ,

  (Programming Windows 95 with MFC),《MFC深入浅出》(Dissecting MFC),

  《windows程序设计》(不分先后)
[16]
Q:VC中常用的文档类,视图类,框架类,应用程序类,自定义类中获取其它四个类的
方法
A:
GET  App
   AfxGetInstanceHandle()
   AfxGetApp()
GET  Frame->View->Document
    SDI   AfxGetMainWnd() -> GetActiveView() -> GetDocument()
    MDI   AfxGetMainWnd() -> MDIGetActive() -> GetActiveView() -> GetDocumen
t()
GET  Menu
     CMenu *pMenu=AfxGetApp()->m_pMainWnd->GetMenu();
GET  ToolBar,StatusBar
      (CMainFrame *)GetParent()->m_wndToolBar;
      (CMainFrame *)GetParent()->m_wndStatusBar;
      CStatusBar * pStatusBa=(CStatusBar*)AfxGetMainWnd()->GetDescendantWind
ow(AFX_IDW_STATUS_BAR);
      CToolBar * pToolBar=(CtoolBar*)AfxGetMainWnd()->GetDescendantWindow(AF
X_IDW_TOOLBAR);
Get  View from Document
      GetFirstViewPosition 和 GetNextView 函数得到指针。
最后提醒:
    在提取到各个句柄之后,因为初次提取的都是标准类句柄,所以,在使用时要注意
将标准句柄转换成自己的类的句柄。

    ((CMyApp*)AfxGetApp())->XXXX();//这的xxxx()就是你定义的类中间的成员。

最后,我要说的是:vc++是一个好工具,更是一个好朋友!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章