標籤:windows 編程 c++ unicode 編碼
一、NMAKE 和 Makefile
1.1 NMAKE - 命令直譯器, 根據Makefile檔案中定義的指令碼,完成項目的編譯等操作
1.2 Makefile - 定義編譯、串連等指令碼語言
1.3 Makefile 檔案的使用
1.3.1 基本文法規則
window.exe:window.obj //依賴行
cl.exe window.c /c //命令列
link.exe window.obj user32.lib
window.exe 的依賴項是window.obj,如果window.obj被重新改寫 window.exe將重建
通過時間戳記(time stamp)判斷程式是否需要重新編譯串連,要重新編譯串連
如果當檔案修改最後時間與時間戳記不同,將會重新編譯連結.
1.3.2 執行過程
1 NMAKE 首先找到第一個依賴行,根據依賴行之間的關係,建立依賴樹。例如:
A:B
B:C
C:D
NMAKE會建立對應的依賴樹,
A
|-B
|-C
|-D
2 在樹建好後 NMAKE會首先執行D的命令列,然後依次執行父節點的命令列,
3 在A的命令列執行結束後,退出NMAKE
4 如果需要執行指定依賴行,需要在執行NMAKE時增加依賴行的名稱
1.4 使用
1.4.1 NAMKE 指定檔案
1.4.2 使用預設的檔案名稱
如果make檔案名稱使用makefile 直接使用nmake命令
二、字元編碼
MessageBox : MessageBoxA MessageBoxW
2.1 編碼的曆史
2.1.1 ASCII 0~127 7位表示
2.1.2 ASCII 擴充碼 8位 表示
字碼頁:通過字碼頁來切換對應的字元
2.1.3 雙位元組字元集 DBCS
使用一個或兩個位元組表示字元
2.1.4 Unicode
全部使用2個位元組表示字元
記憶體/硬碟等資源佔用大
2.2 C語言和編碼
2.2.1 單位元組字元和字串
char c = ‘A‘;
char * pc = "ABCD";
2.2.2 寬位元組的字元
wchar_t cText = ‘A‘;
wchar_t*pszText = L"ABCD";
2.2.3 相關函數
單位元組字元的函數, 對應有多寬位元組的函數。
strlen wcslen mbslen
printf wprintf
2.2.4 TCHAR
為了程式中可以方便的支援unicode和多位元組字元等,所以使用TCHAR來定義字元和字串
更具_UNICODE宏開關會將TCHAR編譯成不同字元類型
#define unicode
#ifndef unicode
typedef char tchar
#define __t(x) x
#else
typedef wchar_t tchar
#define __t(x) l##x
#endif
使用時需要增加TCHAR.H標頭檔支援,使用_UNICODE 宏開福安進行編譯
定義方式:
TCHAR* pszText = __T( "ABCDEF" );
2.2.5 Unicode的控制台列印
WriteConsole
2.3 Win32 程式與編碼
2.3.1 Win32 API 的定義
每個API對多位元組和UNICODE分別有不同的版本
MessageBox
MessageBoxA 多位元組
MessageBoxW UNICODE字元
2.3.2 字元轉換
MultiByteToWideChar
WideCharToMultiByte