今天将linux下对硬盘的管理程序移植到pc上,遇到问题多多。
1、linux硬盘管理程序是c写的,对类型的检查很不严格。写代码的人也没注意类型转换,比如malloc是没有进行类型转换,c中没有bool,代码中用enum定义了个bool,这个跟c++的类型不同。于是在c++编译的时候出现了很多问题。
2、time_t在pc上默认是64位。在c中时32位。需要添加一个宏才能转成32位,这个宏要添加在所有.h的前面。
3、在vs2005中c库有很多种,编译的时候要选择正确的库。中工程设置--c++设置中。
4、在vs2005中字符集选择也是麻烦,如果选择的字符集不对程序就跑不起来,比如CreateFile中的文件名。
5、加入的头文件也有顺序,某些头文件依赖另外的头文件。这个依赖的头文件要在前面。
6、发现pc下的mktime跟linux下的mktime出来的结果又差别。听说是夏令问题,设置time_t结构体中的一个变量。还没弄明白,在pc上怎么改都没有变化。
7、vs2005上导出一个静态库方法,新建项目--win32工程--静态工程。
8、在工程中引入静态库,1加入静态库头文件,2在工程属性中添加新库目录,3#parma(lib, “库名”)
9、vs2005下提供了更加安全的sprintf_s等函数。
10、vs2005下open打开写入字符时如果遇到0x0A会自动在前面加0x0D。用二进制写入就没有这个问题。
11、vs下编译静态库注意选择的运行时库,在使用的时候要用相同的运行时库否则会很多错误