Friday, August 24, 2007

Tips for COM programming.


我们写程序的时候到比较简单,请大家遵守几个原则:
  1、启动组件得到一个接口指针(Interface)后,不要调用AddRef()。因为系统知道你得到了一个指针,所以它已经帮你调用了AddRef()函数;
  2、通过QueryInterface()得到另一个接口指针后,不要调用AddRef()。因为......和上面的道理一样;
  3、当你把接口指针赋值给(保存到)另一个变量中的时候,请调用AddRef();
  4、当不需要再使用接口指针的时候,务必执行Release()释放;
  5、当使用智能指针的时候,可以省略指针的维护工作;(注1)



 总的来说,调用组件程序大概有如下方法:
#include 方法 IDL编译后,为方便C/C++程序员的使用,会产生xxx.h和xxx_i.c文件。我们真幸福,直接#include后就可以使用了
#import 方法 比较通用的方法,vc 会帮我们产生包装类,让我们的调用更方便
加载类型库包装类 方法 如果组件提供了 IDispatch 接口,用这个方法调用组件是最简单的啦。不过还没讲IDispatch,只能看以后的文章啦
加载ActiveX包装类 方法 ActiveX 还没介绍呢,以后再说啦



自动化组件的使用方式 简要说明
示例0 在脚本中调用 在第九回/第十回中,已经做了介绍
示例1 使用 API 方式调用 揭示 IDispatch 的调用原理,但傻子才去这么使用那,会累死了
示例2 使用 CComDispatchDriver 的智能指针包装类 比直接使用 API 方式要简单多啦,这个不错!
示例3 使用 MFC 装载类型库的包装方式 简单!好用!常用!但它本质上是使用 IDispatch 接口,所以执行效率稍差
示例4 使用 #import 方式加载类型库方式 #import 方式使用组件,咱们在第七回中讲过啦。常用!对双接口组件,直接调用自定义接口函数,不再经过 IDispatch,因此执行效率最高啦
示例x vb、java、c#、bcb、delphi....... 反正我不会,自己去请教高人去吧 :-(



通知的方法
  当程序甲方内部发生了某个事件的时候,需要通知乙方,无非使用几个方法:
 通知方式 简单说明 评论
直接消息 PostMessage()
PostThreadMessage() 向窗口或线程发个消息 你什么时候执行我就不管啦
SendMessage() 马上执行消息响应函数 不执行完消息处理函数不会返回
SendMessage(WM_COPYDATA...) 发消息的同时,还可以带过去一些自定义的数据 比较常用,所以单独列了出来
间接消息 InvalidateRect()
SetTimer()
...... 被调用的函数会发送相关的一些消息 这样的函数太多了
回调函数 GetOpenFileName()...... 当用户改变文件选择的时候,执行回调函数 嗨!哥们,这是我的电话,有事就言语一声。


Saturday, August 18, 2007

房子终于定下来了。

一定要写点东东。



七八月份发生了很多事情都来不及记下来。



昨天出去跑了一天终于把房子定下来了,要搬到莘庄去了。找房子是很折磨人的事。来
上海两年多了,住了两个地方。

不过那两个房子找起来还是挺快的,都只看了一个就定下来了。这一次折腾了很长一段
时间,上网查,找中介…



然后就是工作的事也挺烦的。现在的这个项目做了两年多了,经历了三个release,已
经没有了新鲜感和passion,再做下去没有了太多乐趣。6月底跟部门负责人谈了下换项
目的事,到现在已经好长时间了还不能调走。刚开始负责人还是挺爽快的说好我帮你解
决,但是先要跟Atlanta 的manager商量下,这个过程可能有点长,需要我耐心的等
等。大概过了两个多星期,又跟我说德国的 Team知道后very frustrated,希望我能再
慎重的考虑下。不过这两年跟德国的team合作还是很愉快的,他们都是四五十岁的
professional,最年轻的也有三室多岁吧,不想国内,程序员都是20多点的毛头。

但是,情感归情感,还是想坚持换一个项目。现在来了个刚毕业的新员工来顶替我,
开始工作交接了。



前段时间还经常收到猎头电话,诱惑不断。好几个都是小公司或是跟现在的公司差不多
性质的,就直接拒绝了。



房子现在是定下来了,但还有一件事可能又要一番折腾了,就是办居住证的事。找房东
到房产交易中心办证明的念头基本可以打消了,只能想办法找有房子的同事办个亲友证
明了。真是很麻烦。

Monday, August 13, 2007

Overhead in project management.

Overhead task:

Product Support

RRT Support

Trainings

Support for consulting

Other overhead

Monday, August 6, 2007

网络编程应用实例


自动更新
发送错误报告
网络蜘蛛
IM
流媒体
P2P
...