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++是一個好工具,更是一個好朋友!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章