jiang 的个人资料自由地带照片日志列表 工具 帮助
2月28日

拿到了开车近一年来的第一张罚单

前2天晚上回来,象平常一样把车停在租的SINGLE HOUSE前面的路上. 结果第二天吃到一张停车罚单,原因是车右边离马路牙子太远! -_-||

估计是因为停车是靠左边停的, 而不是靠右. 没想到还真有警察来抓啊. 不仅是我,隔壁房客客还有楼上房东也都吃到了TICKET, 原因和我一样. 真是衰啊. 还好钱不是很多, 20刀.
2月21日

COM学习笔记:COM和DLL

最近可能要用到com有关的一些东西,所以上网搜了下com的基本知识。 印象中com应该和dll有比较密切的关系,但是又不清楚具体是怎样的。没有搜到相关的说明文章,那么就自己找个例子分析一下吧。
 
用vs 2008,写一个com server and client 还是很方便的。
编译完以后,用depends (http://www.dependencywalker.com/ ) 看了下,发现comtest (客户端)并没有直接调用 myserver.dll (服务端)。但是调用了ole32.dll
那么comtest是什么时候和myserver联系起来的呢?
为了查清楚这个问题,先把comtest.cpp改下,加一个cin >> a;  这样运行comtest的时候要读入一个字符才结束。
运行comtest, 然后拿出我最喜欢的工具:process explorer (www.sysinternals.com ) 看看comtest 到底调用了哪些dll (注意如果在vista下,要用run as administrator 来启动process explorer ) 否则看不到cmd.exe 所调用的dll ).
仔细一看,发现了myserver.dll
 
结论 (部分为猜测):
1。 既然com 提供的是binary level IPC, 那么没有在client端中直接调用 server 的dll 是正常的,因为server 还有可能在其他机器上。这些没法在编译时知道。
2。那么com client 怎么找到server 呢,估计是通过ole32.dll。 向这个dll 查询可能的server.
3。如果server 已经注册过,那么ole32.dll 能够发现这个server dll. 并把它加载进来。然后client 就可以用server 提供的服务了。
 
说白了,就是在一般的exe, dll之间再加了一层。就这么简单。