先说一个福星,罗sir,只要和他废话一下,尽管谈一些没用的话,总会灵机一动得出有用的想法...
我用的是C语言(因为是标准Windows API函数输出,所以还是在Visual C++上写)
先是C的一些函数,比如创建空包裹时候写入一些空long值,应该是1024字节,后来多了16字节,函数是
fwrite(&lngBlank,4,4,f);
lngBlank 与源代码无关,只是做个比喻,第一个4就是sizeof(long),第二个4开始不明白,f是文件指针
后来跟罗sir废话一下,没什么结果,突然发现16是4的平方,于是把后面的4改为1,文件少了12字节,也就
是只多了4字节,再把for 循环的 1024 改为1020 也就是从1021开始写4字节(fseek定位)就Okay了
我想C中的读写过程是 根据文件指针f读写当前指针4字节数给变量lngBlank 指针下移4字节然后重复
4次,于是多写了个NULL和一个字符串变量的内容 - -
然后是对路径的判断,C中字符串都是正则表达式, / 是转义字符,所以路径要先转义,如:
"C:/Test.pkg "
要写成
"C://Test.pkg "
而函数输出API给其他语言调用,比如VB的路径是写成C:/Test.pkg,我的做法是根据字符串指针,如果遇
到'/'且后面一个字符不是'/'就加一个'/'给它,后来显示编译出现:
- newline constant (常量出现换行)
于是改为'//',编译通过,但是还是无法得到'/',得到一个乱码字符,甚至用'/'的ASCII - 92 来判断也不行,没
办法,找罗sir聊了下,他说没办法,除非你改C文件头的源代码,还是没结果,扛走了他一个显示器(天气潮湿,
我的显示器Over了),回来突然一闪念,测试一下得出结果是:
C在编译字符串的时候会把'/'后的一个字符转义,在内存中根本不存在'/'字符,而VB等语言会直接把'/'字符
的二进制数据写入内存,于是char * 变量从VB是可以直接用String变量传递过来的 - -
还有一些细节的东西是多试试就知道的,像fseek函数 0代表的位置等等,希望对遇到同样问题的人有帮助,
也希望以后这方面很熟练的同志能多帮帮某人...