win_c/c++ mess01

2020-01-04  本文已影响0人  Ewitter

1. win makefile

1.1 win makefile,eg:
# Nmake macros for building Windows 32-Bit apps
!include <Win33.Mak>
OUTDIR = START_BIN
# ---------Build Rule-------
all: $(OUTDIR) $(OUTDIR)\start.exe

# if OUTDIR does not exist,then create 
$(OUTDIR):
    if not exist "$(OUTDIR)/$(NULL)"  mkdir $(OUTDIR)

# ----------compile----------
$(OUTDIR)\start.obj: start.c
    cl -c -DCRTAPIl=_cdecl -DCRTAPI2=_cdecl -nologo -GS -D_X86_=1  -DWIN32 -D_WIN32 -W3
       -D_WINNT -D_WIN32_WINNT=0x0500 0D)WIN32)IE=0x0500 -DWINVER=0x0500    
       -D_MT -MTd /Gz /Fo"$(OUTDIR)\\"  /Fd"$(OUTDIR)\\"  start.c

# ------------link-----------
$(OUTDIR)\start.exe: $(OUTDIR)\start.obj
    link /INCREMENTAL:NO /NOLOGO -subsystem:windows,5.0 -out:$(OUTDIR)\start.exe 
    $(OUTDIR)\start.obj kernel33.lib ws2_33.lib mswsock.lib advapi33.lib bufferoverflowu.lib

#-------------clean Rule------
clean:
    if exist $(OUTDIR) rd /s /q $(OUTDIR)
1.2 makefile explain:
预处理 !include <Win33.Mak>
注释      #
宏(例子中的 OUTDIR)      宏定义直接使用“=”,“=”前为 宏名,其后为 宏值
宏引用                 $(macro_name)

nmake命令参数:
    NMAKE [option] [/f makefile] [/x stderrfile] [macrodefs] [targets]
    [targets]指 目标,默认是 makefile中的第一个目标;
    用/f 指定makefile的名字,默认是当前目录下文件名为makefile的文件。
nmake时间戳 判断机制:
    生成一个目标时,若所有依赖项的最后修改时间早于目标的最后修改时间,则没必要再生成。

特殊宏:
S@                      当前目标的全名(全路径)
SS@                     当前目标的全名(全路径),作为依赖项
S*                      除去文件扩展名的当前目标的全名
S**                     当前目标的所有依赖项
S?                      时间戳晚于当前目标时间戳的所有依赖项
S<                      时间戳晚于当前目标时间戳的所有依赖项,在推理规则的命令中有效
MAKE                    调用NMAKE
MAKEDIR                 调用NMAKE时的当前目录
MAKEFLAGS               当前有效的选项(去掉/F),eg: /$(MAKEFLAGS)

2. tool tips

2.1 VS-tool:
alt + ->                代码提示
F5                      开始调试
shift+ F5               结束调试
F7                      build
F9                      设置/取消breakpoint
F10                     debug模式下 单步执行
F11                     debug模式下 步入函数
F12                     转到定义
ctrl+ G                 转到行
ctrl+ W                 选中单词
ctrl+ T                 前后交换
ctrl+ U                 转为小写
ctrl+ shift + U         转为大写
ctrl+ K 然后ctrl+ C       注释所在行
ctrl+ K 然后ctrl+ F       整理代码格式
ctrl+ F  /  ctrl+ N     查找/新建
其他快捷键设置(工具-选项-环境-键盘)

生成项目:(或将项目生成为一个 可执行文件或者动态链接库)
    生成解决方案:生成-生成解决方案,或 解决方案管理器 右键单击 解决方案名;
    生成单个项目菜单:生成-生成项目名称,或 解决方案管理器 右键单击 解决方案名;
若生成出错,可查看错误列表:视图-其他窗口-错误列表。

eg:
在“C/C++”子选项下的“代码生成”选项页中,“运行时库”选项下,/MD( Release)选项或/MDd( Debug)选项。
使用这两个选项编程,将会调用一些系统中原本并不存在的接口。要解决这个问题需将选项改为/MT。
如果新建 C/C++项目时选择“常规” → “空项目”,在运行时库时使用的选项就是/MT(这也是
cl.exe 的默认选项)。
建议:在编写 Windows 本机(Native)应用程序时,建议建立工程时选择“空项
目”,这样编译连接选项大多都是默认的
2.2 WinDbg command(more info press F1)
d:查看内存数据
l:列出进程信息
Im:查看已加载模块
g:运行
ld:加载符号文件
r:查看寄存器
bp、bu、bm: 下载断点,bp为执行断点,bu为未解析断点,bm为符号断点
bl:列出断点
bc:清除断点     
2.3 vc6
alt + F8         代码对齐

3. unicode & prefix

3.1 关于UNICODE
    _UNICODE defined                _UNICODE not defined    
        
#define _tcslen wcslen              #define _tcslen strlen      
typedef wchar_t  TCHAR              typedef  char TCHAR 
#define __T(x)  L##x                #define  __T(x)  x  
#define MessageBox MessageBoxW      #define MessageBox  MessageBoxA 
#define _T(x) __T(x)
#define _TEXT(x)  __T(x)
eg: if macro parameter is ""Hello"", then L##x is  L""Hello"""
3.2 前缀 含义
    Prefix                              Constant

    CS                                  Class style option
    CW                                  Create window option
    DT                                  Draw text option
    IDI                                 ID number for an icon
    IDC                                 ID number for a cursor
    MB                                  Message box option
    SND                                 Sound option
    WM                                  Window message
    WS                                  Window style
3.3 Suggested variable name prefix
    prefix                              Data Type

    c                                   char/WCHAR/TCHAR
    by                                  BYTE(unsigned char)
    n                                   short
    i                                   int
    x/y                                 int used as x/y-coordinate
    cx/cy                               int used as x/y length;c stands for "count"
    b/f                                 BOOL(int); f stands for "flag"
    w                                   WORD(unsigned short)
    l                                   LONG(long)
    dw                                  DWORD(unsigned long)
    fn                                  function
    s                                   string
    sz                                  string terminated by 0 character
    h                                   handle
    p                                   point
上一篇下一篇

猜你喜欢

热点阅读