预览模式: 普通 | 列表

delay load

    以前就想过delay load可以用来做一些偷懒工作,不过却一直没啥机会使用,真到可用之处,却忘了这个东西。

    昨晚突然想起来,我可以用这个功能来根据配置文件加载不同的摄像头sdk,今天在touchwin的代码上进行了试验,结果就是: 可行。

    这样也蛮不错,以后维护后台的时候,可以少维护2个版本了。

    而且,我不需要改动任何代码,仅仅只是修改了一下link选项

Tags: delay load

分类:C/C++ | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 8

binfstream

以前写了一个不知道放哪去了,就重写了一个:

C++代码
  1.   
  2. class binfstream : public std::fstream   
  3. {   
  4. public:   
  5.     // 一个比较丑陋的构造函数 ^_^   
  6.     binfstream( const char* file_name, int open_mode = std::fstream::in)   
  7.         : std::fstream(file_name, open_mode | std::fstream::binary | ( (open_mode & std::fstream::out ) == 0 ? 0 : std::fstream::trunc) )   
  8.     {   
  9.   
  10.     }   
  11.   
  12.     ~binfstream()   
  13.     {   
  14.     }   
  15.   
  16.     // input   
  17.     template<typename T>   
  18.     binfstream& operator << (const T& t)   
  19.     {   
  20.         write( reinterpret_cast<const char*>(&t), sizeof T);   
  21.         return *this;   
  22.     }   
  23.   
  24.     binfstream& operator << ( const char* t)   
  25.     {   
  26.         write( t, strlen(t) + 1);   
  27.         return *this;   
  28.     }   
  29.   
  30.     binfstream& operator << ( const std::string s)   
  31.     {   
  32.         return operator << ( s.c_str());   
  33.     }   
  34.   
  35.     // output   
  36.     template<typename T>   
  37.     binfstream& operator >> (T& t)   
  38.     {   
  39.         read( reinterpret_cast<char*>(&t), sizeof T);   
  40.         return *this;   
  41.     }   
  42.   
  43.     binfstream& operator >> ( std::string &str)   
  44.     {   
  45.         char cur_char;   
  46.         while( read( &cur_char, sizeof cur_char ) )   
  47.         {   
  48.             if( cur_char == 0) break;   
  49.             str.push_back( cur_char);   
  50.         }   
  51.         return *this;   
  52.     }   
  53.   
  54. };  

使用自然是以简单为主:

C++代码
  1. #include <iostream>   
  2. #include <fstream>   
  3. #include <string>   
  4. #include "binfstream.h"   
  5.   
  6. int main( int argc, char* argv[])   
  7. {   
  8.     binfstream f( "d:\\log.txt", std::fstream::in | std::fstream::out);   
  9.   
  10.     f << 3 << std::string("hello") << "world" << 1.133;   
  11.     int i;   
  12.     std::string s1;   
  13.     std::string s2;   
  14.     double d;   
  15.   
  16.     f.seekp( std::fstream::beg);   
  17.   
  18.     f >> i >> s1 >> s2>> d;   
  19.        
  20.     std::cout << i << s1 << s2 << d;   
  21.   
  22.     return 0;   
  23. }   

其中operator << 和 >> 并没有写为友元,主要是因为我。。想 偷懒

Tags: fstream

分类:C/C++ | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 3

getline

getline原来也可以用于做字符串分割,我太out了

C++代码
  1. stringstream ss( input);      
  2. string str;      
  3. while( !ss.eof())      
  4. {      
  5.     getline( ss, str, ',');      
  6.     results.push_back( str);      
  7. }      
  8. return results.size();    

 

Tags: stringstream getline

分类:C/C++ | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 78

cppe4x

    源码已经上传到google code,以下是project链接 http://code.google.com/p/cppe4x   

cppe4x简介:
  1.     cppe4x是一个简单的C++跨平台XML解析器,基于DOM和XPath方式实现,其目标是快速的构建xml应用。    
  2.   
  3.     cppe4x非常适合快速的构建测试程序以及配置文件的读写。当前仅支持UTF8格式的XML文件。同时,cppe4x在Microsoft Windows平台下会自动进行utf8与ansi编码的双向转换。    
  4.   
  5.     cppe4x最初的目标是构建与ActionScript3?中的E4X语法类似的接口,但由于C++与AS3语法的巨大差异,目前的cppe4x无法完全实现该目标。尽管如此,cppe4x还是尽量的保持了操作的简洁和有效性。

    这个xml解析器的代码并不长,但是前前后后却花了好几个月的时间,结构也数次调整。也正因如此,方知一个库的构建,是如此的困难。现在,依然有很多不满意的地方。程序和文档的完善,尚需时日。

Tags: cppe4x xml e4x

分类:C/C++ | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 39

vs环境下,CreateProcess

    前几天完成了之前挂起来的一个半截子程序,其中有个功能是拦截console的输出并显示。在vc环境下运行程序(无论是Debug还是直接Run),一切正常。但是单独去运行,他就失败了,拦截不了console的输出。

    查了半天也没查到问题所在,开始我想,会不会是vs下给了进程debug权限?于是我又写了代码把程序提高到了debug权限,结果很沮丧,问题依旧。

    后来又查了半天,胡乱试了一试,结果问题解决了

    原来这种情况下,CreateProcess要指定DETACHED_PROCESS参数。

分类:C/C++ | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 64

touchwin产品暂停开发

   听同事说,touchwin暂停开发,现在全力做另外一个产品

   过年前我还在忙着touchwin,结果呢,还没回公司,就说产品暂停了,或者说得好听点,这是个长期项目,随时要捡起来的。

    disappointted

分类:C/C++ | 固定链接 | 评论: 1 | 引用: 0 | 查看次数: 103

宏与namespace

刚发现的,namespace并不能限制宏的作用域。 

C++代码
  1. namespace aaa   
  2. {   
  3. #define BBB int x;   
  4.     int b(){ return 0;};   
  5. }   
  6.   
  7. int main( int , char*[])   
  8. {   
  9.     BBB;       //ok   
  10.     aaa::b();  //ok   
  11.     b();       //failure   
  12.     aaa::BBB;  //failure   
  13.     return 0;   
  14. }  

 

Tags: namespace macro

分类:C/C++ | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 63

反省一下 - 同一地方摔2次

    公司之前采用的24fps的摄像头,在换到新的环境后,效果表现很不好,远远没有达到能让人接受的范围。

    开始一直以为软件问题(因为该环境下本来硬件就不可能与之前的环境相比较),后来终于有天,我才想起来应该录下每一帧图像,然后看看如何处理。录像的结果大跌眼镜,视频过度模糊,导致接下来的图像处理失败。

    后来公司寻找到一款60fps的摄像头。买回摄像头后,在平常的环境下,效果非常好,噪声低,而且响应非常快。在完成针对该摄像头sdk的二次开发后,我们将摄像头装入了在公司的硬件平台下,效果有了很大的改观。由于与之前的比较,效果提升很大,我们对新摄像头的表现十分满意。但是慢慢的,当惊喜过了以后,一些存在的问题还是慢慢凸显,成为必须要解决的问题了。

    大概也是自己一根筋,我一直认为硬件提升到目前的状态应该是已经很完美了,接下来的工作都应该软件来完成,能尽量好就行,但是折腾了很久,使用了各种计算策略,最后仍然败下阵来。

查看更多...

分类:C/C++ | 固定链接 | 评论: 2 | 引用: 0 | 查看次数: 98