VC常見入門問題總結(一) (轉)

worldblog發表於2007-08-17
VC常見入門問題總結(一) (轉)[@more@]

1:al error C1010: unexpected end of file while looking for precompiled header directive該如何解決
 
如果發生錯誤的是由其他的C程式碼檔案新增進入當前工程而引起的,則Alt+F7進入當前工程的Settings,選擇C/C++選項卡,從Category組合框中選中Precompiled Headers,選擇Not Using Precompiled headers。確定
  如果發生錯誤的檔案原本是該工程中的,則檢查該檔案頭部有沒有#include "stdafx.h"語句,沒有的話新增。
  如果還不行,也有可能是定義的類或結構體等最後忘了加分號,注意一下。
2:fatal error RC1015: cannot open include file 'afxres.h'.該如何解決
 
#include "afxres.h"語句是在.rc檔案中的,而afxres.h檔案在VC的目錄中的.VC98MFCINCLUDE目錄中,所以著重查一下Tools選單中Options對話方塊中的Directories中的包括檔案的路徑是否正確,是否在VC的安裝路徑中,不是的話,改過來,如果這方面沒問題,則到其他機器中複製afxres.h到相應的目錄中
3:Dll分配的塊,應用釋放,結果報異常。
 
用GlobalAlloc()代替new, 用GlobalFree() 代替delete就不會出錯了
  其實還有一個辦法,就是把dll的Settings的C/C++選項卡的Code Generation的Use Run-time liberary改成De Multithreaded DLL,在Release版本中改成Multithreaded DLL,就可以直接使用new和delete了,沒問題
  比較規範點的做法一般是DLL分配的記憶體由DLL釋放。在DLL中加一個釋放記憶體不是更好嗎。
4:發現列印預覽的圖形明顯比螢幕顯示圖形小,怎麼辦?
  這多半是CDC對映的選擇引起的,預設狀態下,選擇的是MM_TEXT模式,MM_TEXT以裝置的畫素點為單位,而不同裝置的畫素點的大小不同,印表機的解析度比顯示器要高很多,所以導致同樣圖形在列印時候變小。解決之道是統一使用其他定長的對映模式,比如MM_HIMETRIC等等(CDC::SetMapMode()改變對映模式)
5:CString、char*、string、int、_bstr_t、CTime、COleDateTime等等的相互轉換,如何判斷一個字串是一個浮點數?

#include
using namespace std;
#include

{
 CString strCString="ABC";
 char strchar[256],*pstr;
 
 pstr=(LPSTR)(LPCTSTR)strCString; >char*
 strcpy(strchar,(LPSTR)(LPCTSTR)strCString); >char[]
 
 _bstr_t strbstr=pstr; *----&gt_bstr_t
 WCHAR *strWCHAR=strbstr; >UNICODE

 strbstr=strWCHAR;
 pstr=strbstr; >char*

 strCString="10";
 int istr=atoi((LPSTR)(LPCTSTR)strCString); 、char[]、char*------&gtint
 strCString.Format("%d",istr); >CString
 sprintf(strchar,"%d",istr); >char[]
 
 pstr=new char[256]; 符串申請空間
 strcpy(pstr,"ABC"); 符串賦值
 delete []pstr; 符串釋放
 
 string strstring="ABC";
 pstr=(char*)strstring.c_str(); >char*

 strCString="-10-27 6:24:37"; >COleDateTime
 COleVariant vtime(strCString);
 vtime.ChangeType(VT_DATE);
 COleDateTime time4=vtime;
 


 COleDateTime time1(1977,4,16,2,2,2); >CTime
 SYSTEMTIME systime;
 VariantTimeToSystemTime(time1, &systime);
 CTime tm(systime);

 time_t time2=tm.GetTime(); >time_t
 COleDateTime time3(time2); >COleDateTime

 斷字串是否是某種型別
 CString sValue("123.1");
 COleVariant vValue(sValue);
 
 BOOL bStrIloat = (SUCCEEDED(VariantChangeType(&vValue, &vValue, 0, VT_R8)) && sValue.Find('.') != -1);
 if(bStrIsFloat)
 {
 AfxMessageBox("浮點");
 }
}

6:如何建立一個UNICODE應用程式?

建立一個應用程式,開啟Alt+F7 settings選項,選擇C/C++選項卡,在Preprocessor definenation中加上_UNICODE,在Link選項卡中,在Category選擇框中選擇Output,在Entry-point symbol編輯框中,新增wWinMainCRTStartup確定。

注意UNICODE程式時,需要在安裝時VC選擇所有選項,否則會缺少動態庫和相應的.lib檔案


7:ADO操作表,出現問題
在開啟資料庫前,新增如下語句試一下pRecordSet->CursorLocation = adUseClient;

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-963480/,如需轉載,請註明出處,否則將追究法律責任。

相關文章