windows应有程序开发系列三:基础知识准备
来源:互联网 发布:mysql union group 编辑:程序博客网 时间:2024/06/05 00:45
昨天晚上睡觉前突然想起了一个问题,我用的开发工具是VC6.0,这是因为,我尝试过很多次安装visual stdio的各个版本,最终都以失败告终,大概是因为的win7版本不怎么好吧,无奈之下只好选用VC6.0。好了,开始今天的主菜。
一、理论知识讲解
1 windows头文件介绍
(a) windows.h——所有的windows头文件的集合,包含了95%以上的windows API函数。
(b) winnt.h——windows字符集头文件
2 资源脚本文件(后缀为.rc的文件),自己指定图标。但是图片格式有要求,必须以.ico为后缀的格式。
(1) 准备一副.ico格式的图标。
(2) 自己动手编写一个.rc脚本文件,我这里写的文件名叫做hello.rc,需要说明的是,现实中不需要自己手动编译,由开发工具自动生成。
<span style="white-space:pre"></span>100 ICON 130316979.ico
用rc.exe编译器对hello.rc文件进行编译,如果编译成功,就会生成hello.RES二进制文件。
(3)用link.exe连接各个目标文件。
(4) 最终生成的hello.exe文件图标如下
以上是手动指定可执行文件的完整过程,实际中由开发工具自动执行,并不需要这么做,但是作为一个c/c++程序员,这样显得比较专业(勿拍砖啊)!
3 makefile文件介绍
(1)手动写一个makefile文件(.mak后缀的文件)
HELLO: cl.exe /c hello.c rc.exe hello.rc link.exe hello.obj hello.RES user32.lib(2)执行makefile文件——nmake命令
在命令行输入nmake hello.mak命令,如果成功,就会生成要得到的文件。
实际的makefile文件中可以有多个依赖行。执行makefile文件的时候,系统默认执行第一个依赖行的内容,后面的依赖行都不执行。
HELLO: cl.exe /c hello.c rc.exe hello.rc link.exe hello.obj hello.RES user32.libCLEAN: del *.obj del *.RES del *.exe
注:HELLO和CLEAN表示依赖行,这个程序员可以自己指定,可以为任何内容(除汉语)
选择执行依赖行:nmake /f hello.mak CLEAN
注:一种/f表示选择
此外HELLO:CLEAN,表示HELLO依赖于CLEAN,先执行依赖的内容,即先执行CLEAN命令,后执行HELLO命令,炫酷吧。
4 字符编码
ASC —— 7位代表一个字符,128个字符,美国人使用的字符
ASCII —— 8位代表一个字符,256个字符,加入了一些其他国家的字符。
MBCS方式,这是一个编码族
DBCS —— 微软在中国使用的一个编码分支,单双字节混合编码,即英文占用一个字节,汉字占2个字节。(计算机的主流编码方式)
A 我 是 程 序 员
01 0203 0405 0607 0809 0A0B
0102 0304 0506 0708 090A 0B(这种编码方式存在这样的巨大缺陷,也就是乱码)
UNICODE编码族,解决了DBCS编码的问题。
UTF8—— LUNIX编码方式
UCS16——微软采用的方式,全部占用两个字节,英文字符高位补零。
5 宽字节字符
char 每个字符占1个字节或2个字节,采用DBCS编码方式
wchar_t 每个字符占2个字节,采用UNICODE编码方式,wchar_t 实际是 unsigned short 类型,定义时, 需要增加“L”,通知编译器按照双字节编译字符串,采用UNICODE编码。需要使用支持 wchar_t 函数操作宽字 节字符串。例如:
wchar_t * p = L"Hello wchar";
wprintf( L"%s\n", p );
一个小小的例子:
#include "stdafx.h"#include "stdio.h"#include "windows.h"/* * 1 char字符的操作*/void C_char(){char *p = "肖申克的救赎";printf("%s\n",p);}/* * 2 wchar_t字符的操作,wcslen()属于windows的API函数,需要包含头文件windows.h*/void W_char(){wchar_t *p = L"泰坦尼克号";int nLen = wcslen(p);wprintf(L"%s %d\n",p,nLen);}int main(int argc, char* argv[]){C_char();W_char();return 0;}实际上,微软已经重新定义了一种TCHAR类型的数据类型,根据条件不同,它可以是wchar_t或者char
TCHAR *p = __TEXT("hello");
二、今天没什么代码实践的内容。可能今天的内容有点晕,但是没有关系,权当延伸。
三、
最后留下来一个问题,看看上面的代码能否得到想要的结果。曾经这个问题也困扰了我一阵子,所以我在这里暂且卖一下关子,预知后事如何,且听我下回分解!
- windows应有程序开发系列三:基础知识准备
- ndk开发 jni基础知识准备
- 三、开发环境准备
- 【微信小程序】开发准备
- Windows 7程序开发系列 任务栏篇
- [Windows驱动开发](三)基础知识——驱动例程
- Kinect for Windows SDK开发入门(三):基础知识 下
- Kinect for Windows SDK开发入门(三):基础知识 下
- [译]Kinect for Windows SDK开发入门(三):基础知识 下
- Kinect for Windows SDK开发入门(三):基础知识 下
- [Windows驱动开发](三)基础知识——驱动例程
- Kinect for Windows SDK开发入门(三):基础知识 下
- [译]Kinect for Windows SDK开发入门(三):基础知识 下
- [译]Kinect for Windows SDK开发入门(三):基础知识 下
- Kinect for Windows SDK开发入门(三):基础知识 下
- [Windows驱动开发](三)基础知识——驱动例程
- [Windows驱动开发](三)基础知识——驱动例程
- [Windows驱动开发](三)基础知识——驱动例程
- c 动态链接库 静态链接库 区别练习,及其调用方法
- python 调用 c++类
- MATLAB图像处理_HSV与RGB颜色空间互转
- 继续上次的android上传文件携带参数POST提交
- http content_type multipart/form-data 和 application/x-www-form-urlencoded的区别
- windows应有程序开发系列三:基础知识准备
- Binary Search Tree Iterator --- LeetCode
- 幸运的技术者---读《京东技术解密》
- iOS 开发测试证书申请
- httpclient gzip压缩
- ETL(数据的萃取、转置、加载过程的粗略图)
- 堆与栈
- 技术人员的职场内功修复
- lispbox 使用简介2