All Stories

协件和插件

协件和插件

  昨天偶然想到,IceSword使用的协件机制是一种处理主程序与其它相关性不大的功能之间关系的不错的方法。虽然想到了这点,但并没有马上去看它是怎么实现的,于是自己躺在床上一边嗑瓜子一边想,想了一会儿大概有了个轮廓。今天起来看了下IceSword,发现基本上我想的也差不多就这样了。它有一个C的头文件,提供接口声明,一个DLL提供进程间通信。而我当时想到的是需要一个LIB,可以静态链接进协件。如果有很多接口需要暴露的话,用DLL会好一点,这样相比LIB,能减小每个协件的文件大小。另外唯一剩下需要考虑的是,采用怎样一个良好的进程间通信机制,要快速稳定,同时又不能太消耗系统资源。  插件以前我只用过DLL形式的,其实似乎COM是很不错的一种选择,只不过我一直对COM没研究,看过一些文章,也还是没搞明白怎么用COM实现插件机制。了解过Eclipse和Emacs等弹性非常好的架构后,隐约觉得用脚本来实现插件也是一种极好的方法。重新修葺一遍代码,整理好功能接口,就可以为多种脚本提供支持了。不过还有一点需要注意的是,用脚本实现的插件,对界面的操作大概都需要主程序来支持了,比如显示一条消息,选择一个文件等。另外还有一点需要提到的是,如果主程序需要暴露很多接口给脚本插件,或者同时需要能支持多种脚本语言的话,使用SWIG是个不错的选择。

五一了,哦耶

五一了,哦耶

  七天长假哦,哈哈,不过也没怎么觉得兴奋,只是想着可以懒洋洋发躺在床上发呆了就感觉安逸。再想想还有一天一千的两天旅行,呵呵,对我来说很奢侈啊!  最近写blog的频率似乎降下来了,因为回到家都不怎么想动了,就看几集动画片,被小丫头知道后还要被嘲笑就这么点追求。工作忙也可以算是这么一个借口啊,怪不得我发邮件问一个人为什么不继续更新他的blog时,他会说最近很忙这样的理由出来啊。现在自己也算是稍微体会了一把。  好穷啊好穷啊好穷啊,只能怪自己太颓废堕落了,呜呜。

居然觉得有点累

居然觉得有点累

  真是难得啊,久违的感觉了。回到家,打开电脑,上几个常去的网站看了看,没什么新鲜的,收了下邮件,也没什么新鲜的,看了几分钟书,不行了,只好趴到床上去。  从公司的图书馆借了本《深入解析ATL》和《Programming Ruby》中文版,其实照以往的经验,这样的大砖头我一般到期了我都不会看几页,只是觉得或者有必要放在身边,以备不时之需。一直在整GT3K那玩意儿,还是有点麻烦啊,要在TreeView中显示,同时要在具有可读性的显示名字以及具有唯一标识性的URI之间来回转换,没有一个好的设计看来是不行了,代码越写越多了。ATL是个好东西啊,里面提供了一些好用的工具类(比如注册表读写类)、宏(比如宽窄字符转换宏)等,只要包含特定的头文件就可以了。今天基本上完成了早上给自己定的任务,争取明天也能完成自己预定的任务,这样五一就可以玩得更舒坦更轻松。他们不用Boost,实在是一大遗憾啊,有些工作不得已只好自己操刀了。

小思宇生日快乐

小思宇生日快乐

  遥祝小思宇生日快乐,一年复一年,一年何其少。最近昏得连日期都忘了,昨天下午下班后回家,突然想起来,慌忙拿出日历看了看是几号,还好没过,今天早上起床便发了个短信意思一下,嘿嘿。  界面基本上搞得差不多了,争取在放假前剩下的四天内,把与GT3K交互的部分完成,至少接口都要实现好,估计那些跟用例交互的部分是不会有这么快出来的。今天得到一个VC写的Demo,估计也只是时间问题了,哈哈,小小地开心一下。四天内如果时间有空闲,可以再完善一下那个一体化平台的设计需求,还要研究一下那个单板软件的需求。都是要新学的,也好,平常自己都不忍心逼自己,趁这次机会刚好对嵌入式开发和COM都有新的认识。

小丫头打电话来了

小丫头打电话来了

  在上网的时候,小丫头突然打电话来,出乎意料地。然后两个人聊了大半个小时,照小丫头的说法,都从公司里聊到家里了。还是照原来一样,小丫头在那里抱怨了一通,呵呵。五一要不要去成都呢,犹豫ing……  写程序总是遇到些奇怪的问题。这两天在研究直接用PSDK写一个能支持在2个TreeView中进行节点拖放的窗口,昨天还一直很奇怪的,只有一个 TreeView能作为拖放的宿,另一个则怎么也不行,但两个TreeView的代码明显是相同的,因为都是从同一个类中的方法啊!今天给窗口加了个拆分 条,可以让鼠标拖动TreeView之间的拆分条来调整两个TreeView的大小,结果稀里糊涂的居然发现两个TreeView都能作为拖放的宿了,真 是奇怪呀,明明我一点都没改动TreeView的代码啊!  从别人那里要来了一个通过COM接口跟GT3K交互的Demo,这个Demo是在Excel中用VBA写的,不知道如果在VC中用,还有多少困难,看来得学一下COM的知识了,比较麻烦呀!  另外一边的人打电话来说,要讨论一下单板软件的相关计划等,呵呵,要做嵌入式开发去了,这让我觉得有点兴奋,因为从来没有接触过这方面的东西,只是别人写的代码倒是看过不少,虽然也从来不看代码流程,只是为了PI值发现些很低级的语法错误。  SharePoint总算第一次被我调得可以显示一点东西出来了,不过还没有研究怎么使用,因为那台老爷机实在太慢了,我无法忍受在这样蜗牛的速度中 进行操作学习。SharePoint的资料是少了点,没办法的时候,只能跟别人交流交流了。而且,才发现目前只要装Windows SharePoint Service 3.0就够用了,不用装Server了,哈哈。  把输入法的界面改了一下,Comp窗口和Cand窗口合在一起了,就像现在流行的输入法一样,不再是传统界面啦,这有一个好处——可以方便地让它支持 Skin,或者不规格窗口。不过老问题还是存在:Firefox中还是出不来。而且一直想把设置窗口改成用PropertySheet样式,但总是要么不 出来,要么弄死机,郁闷,只好暂时就要原来的了。还有个问题,也是这两天才遇到的,在用UNICODE编译的时候,为什么stprintf总是得到乱码?

关于C++0x的比较新的消息

关于C++0x的比较新的消息

  这算不上最新消息,因为从Boost Develop的maillist上看都已经是前天发出来的消息了。上周C++标准委员会在英国Oxford召开了一次会议,主要是为了能在今年秋季时在Kona召开的会议中完成标准的草稿。完成草稿后,就会发布给ISO的成员国以及公众,以便收集各方的意见,这将持续1年时间用于处理各种意见。然后就可以发布正式的标准了,而ISO还会再经过1年时间对这个标准进行批评认可。  在csdn的blog上还看到过有人兴奋地谈到,这个C++0x说不定是C++07,这样看来,如果以ISO发布的时间点看,应该是C++09了,呵呵。  之后,照安排,C++标准委员会还会有几次会议: - July, 2007, Toronto, Canada. - October, 2007, Kona, Hawaii, US. - March, 2008, Redmond, Washington, US. - June/July, 2008, Sophia Antipolis (Nice area), France - October/November, 2008,...

分了些奇怪的任务给我

分了些奇怪的任务给我

  今天开双周例会,结果发现人力不够用了,而我作为最近才加入组的成员,已经肩负重任地看了3个星期的资料了,而且光看资料不说,连个屁都没放出来。于是老大发现这么个人力虽说浪费了也不是很可惜,可惜的是当前那些任务是进度越来越紧张,交付日期可谓近在眼前,让交付件能顺利产生可谓迫在眉睫啊!然后,突然给了我两项任务,我瞬间晕倒。这样下来我真要变成一个复合形人才了,又能做嵌入式软件开发,又能做Windows桌面应用软件开发,还会用SharePoint做Web开发!  照阿菲那颇具讽刺意味的话说,这下不无聊了撒,不会浪费时间了撒。我于是奋发图强,决定天天晚上加班,因为那些任务我好像似乎一点都不知从何下手。经过大致的跟人讨论、自己看文档,又突然发现,晚上加班也是徒劳的,或者说,其实我真的很自大很高估自己,我压根就是觉得不用晚上加班,那点事情也许也是能搞定的,并且如果真的晚上加班,实际上也没有多少意义。唉!

鄢哥又过来培训了

鄢哥又过来培训了

  鄢哥这是第三次来我们公司培训了,每年一次啊!记得上次是差不多一年前来的吧,那时候小思宇刚刚搬出去了,鄢哥过来了,公鸡也跟着过来耍一下,我当时还有点懒得走,结果被小妞小玉玉鄙视了。于是约好在万科城的肥牛府吃一顿,一张长条桌,三男三女坐在那里。今年就只有鄢哥一个人了,小思宇她们也都各自有着各自的事情。真是去年今日此门中,人面桃花相映红啊!  鄢哥其实来了已经一星期了,我早就通知了阿菲,喊她抽空出来吃饭。昨天早上照例8点半醒来,给阿菲发了个短信,这短信还被她后来抱怨了一通,说我太早了。约好傍晚五点半去华强北茂业见面,然后吃饭。我早已睡不下去了,就起来玩电脑,但又没什么特别的兴致。打开Foxmail,翻看起以前从学校BBS上收下来的邮件,里面记录了我在大学四年里的BBS经历。真是令人怀念啊,想当年也算是小有名气的吧。想想当时在学校,是多么的呼风唤雨、叱咤风云啊,看着别人都是菜鸟,可是从学校出来两年,自己成为菜鸟,白白浪费了两年时间不说,之后的路怎么走,可谓是越来越迷茫了!邮件中还保存了很大一部分的聊天记录,依稀可以看到我的感情经历,从afei到ilikeyou,再到最后的lookfor,前两次的小心翼翼,胆怯不前到最后一次的无赖泼皮,死缠烂打。现在看来,我都隐约觉得奇怪我当时居然能说出这么肉麻的话来。也算是我的青春无悔的见证了,哈哈。对于那个家伙,或许我的内心深处真的是怀有感激之情吧,因为她,才使得我后来变得不像以前那样自卑,所以后来虽然几次三番觉得很受伤,但我还是愿意真心诚意地好好待她,而无论结果如何。如果我不说,或许她是永远都不会明白为什么了!  看邮件看得百感交集,下午看到男妹妹在QQ上,于是顺便叫了一下她。虽然大家都在深圳两年了,但居然从毕业后都一直没见过她人!几个人从不同的起点,到相同的目的地,果然五点半的时候,找到了阿菲和鄢哥,看样子男妹妹得过一会才能到了,就下去麦当劳一人点了杯喝的聊天。一直等到男妹妹过来,居然华强北的路都认不到,呼呼。四个人去吃了顿民间瓦罐煨汤,然后送男妹妹上车。鄢哥跑来我屋里睡,跟同住的同学一起聊天到快3点。睡觉,一直到12点,出去吃了顿中饭,鄢哥就回旅馆去了。

在VC中调试DLL

在VC中调试DLL

  输入法最后的文件后缀虽说一般是ime,但它是个地地道道的dll文件。有过几年地狱般的调试经历,好不容易从MessageBox升级到OutputDebugString,最后终于进化到用IDE里集成的debugger。不过一直以来都是只对完整的可执行文件进行调试跟踪,对dll还没有相关的经验,尽管也写过几个,但那都太简单了,基本不用跟踪就可以正常工作啦。现在的输入法就复杂了,开始没想通怎样可以进行源码级调试,还是退回到OutputDebugString,编译连接一把,在记事本中试一下。后来想想,它应该可以attach相关进程进行调试吧,白天在公司也看到过一个文档,讲的是怎么在VC的IDE里进行相应的设置。其实非常简单,在项目属性里,把调试一页中的命令设为notepad.exe就行了。随便在源代码中打个断点,启动调试,VC会弹出消息框说notepad.exe没有调试信息,不用管,继续,notepad.exe运行后,切换输入法到这个被调试的输入法,如果程序走到断点这里了,就会被断下来了,变量窗口、输出窗口都跟调试exe文件时一模一样,哈哈。有一点需要追加说明一下,这个dll文件一定要放到能被load的地方,像普通的dll的话,放在和exe文件相同的目录就行,输入法就需要先安装一遍,这时ime文件是需要放在系统目录下的,所以方便起见可以直接在项目属性里把最终的输出文件指定到系统目录下就行了。  另外再说一点和UNICODE相关的事。为了和国际接轨,程序使用UNICODE似乎是最好的方法,我就先在输入法安装程序中做试验,一个百来行的小程序,用UNICODE选项进行编译,结果还真发现了问题,有个字符串在写入注册表时总是写不全,这让我很奇怪。同样的代码改用多字符集编译连接就没有问题。看看代码我已经都尽量用各种字符操作的宏了,最后发现原因,_tcslen在UNICODE的情况下,2个字节只算为1,在写入注册表REG_SZ类型的键值时,需要指定字符串长度,所以其实只指定为实际占用空间的一半了,这种情况就需要特别处理。虽然发现了这个问题,在这么个小程序里还影响不是很大,而且很容易暴露问题,但要是输入法程序是用UNICODE编译的不知道还会有什么问题呢!怪不得极U被炒得这么火!