`
yiyeqinghuasoon
  • 浏览: 643432 次
文章分类
社区版块
存档分类
最新评论

开发YXPack32.dll过程中的一些经验

 
阅读更多

先说一个福星,罗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代表的位置等等,希望对遇到同样问题的人有帮助,

也希望以后这方面很熟练的同志能多帮帮某人...

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics