2004年05月23日

今天只干了两件事情记忆深刻——重修和聊天室。

重修。感觉上仔细地听课真的全能听懂,但是每每真正开课的时候却又不听而最终重修,有种得不偿失却乐此不疲的感觉。

聊天室。聊天室以BT居多,有种哭笑不得的感觉。

2004年05月20日

让我发此感慨的因由,乃是来自北京的一个长途——杭马说,他见到Michael Jordan了。
“你要是在现场,你也得哭!”他说。
——我会吗?
我承认在看98年总决赛的最后一幕时自己很激动,并且是看一百次激动一百次。
但是,一个被浓厚的商业气息罩身的男人,我对他没多大兴趣。我站在人群中,对着那个高大的背影轻轻摇摇头,然后转身离去——这是我所设想的场面。
Enjoy myself, enjoy basketball, enjoy the game…but not enjoy Michael Jordan.

2004年05月17日

谁知道中国又出了什么惊天动地的大事情。总之,一有事情,学校的某些地方就会相应地出现反应。
比如专家组进校评估,则关闭BBS。
比如台大选,则不准出校进市。
比如这一次,封了所有个人主页。

——我也懒得再猜有什么事情发生了。

2004年05月15日

He is Michael Jordan.
乔丹走下神坛。
现在的乔丹,不再是代表篮球的上帝,他只是一个垂垂老矣尚能饭否的商业工具罢了。
不否认,是这个人让我充分认识到了篮球的魅力,也是他让我在98年总决赛的时候热血沸腾。他那神奇的职业统计,亦会载入世界体育的历史。
当我学会充分享受篮球之后,我开始冷静地评价这个“上帝”。篮球是艺术,然而艺术中掺杂的商业成分不可能也变成艺术。——欣赏他的球技和比赛,这都能够带给我激情。
但是我绝不可能以讨得他的一张签名为荣。

2004年05月14日

COM服务器

最简单的COM服务器为进程内服务器,它通常被装载到客户程序的地址空间中。如果COM库要使用进程内服务器的话,那么该服务器必须做到以下两点:
1、在注册表的HKEY_CLASSES_ROOT\CLSID中注册。
2、导出一个名为DllGetClassObject的函数。
此外,服务器还通常导出以下函数:
·DllCanUnloadNow:由COM库调用,用以查看该COM服务器是否可以从内存中卸载。
·DllRegisterServer:由注册程序(如RegSvr32)调用,注册服务器。
·DllUnregisterServer:注销服务器。


CoCreateInstance内幕

一个CoCreateInstance的调用过程如下:
1、客户程序调用CoCreateInstance,传递相应的组件CLSID和接口IID。
2、COM库在HKEY_CLASSES_ROOT\CLSID查找服务器的CLSID。
3、COM库读取服务器DLL的全路径,并将该DLL装入客户程序的地址空间。
4、COM库调用服务器的DllGetClassObject,向类厂请求相应的组件。
5、服务器创建一个类厂,并从DllGetClassObject返回之。
6、COM库调用类厂的CreateInstance方法,创建客户程序请求的COM对象。
7、CoCreateInstance向客户程序返回所请求的接口。


COM服务器的注册

当COM服务器被注册(通常通过DllRegisterServer)后,它将会在HKEY_CLASSES_ROOT\CLSID下创建一个以自己CLSID为名的子键,例如Microsoft Excel工作表:
{00020810-0000-0000-C000-000000000046}
该子键的“默认”键的键值为该组件的字符串名称。
在组件的子键下,有一个名为InprocServer32的子键。这个子键包含了两个字符串:“默认”键的键值为服务器DLL的全路径,“ThreadingModel”键的键值为线程模型——对于单线程服务器,这个值取Apartment。

2004年05月13日

COM对象的创建


HRESULT CoCreateInstance (
    REFCLSID  rclsid,
    LPUNKNOWN pUnkOuter,
    DWORD     dwClsContext,
    REFIID    riid,
    LPVOID*   ppv );
参数说明:
rclsid:对象的CLSID。
pUnkOuter:当聚合COM对象时使用,可以用来向既有的对象添加新方法。
dwClsContext:希望使用何种类型的COM服务器。对于进程内DLL,这个值为CLSCTX_INPROC_SERVER。警告:如果在没有安装DCOM的Windows 95系统上使用CLSCTX_ALL(ATL的默认值),那么函数会调用失败。
riid:希望返回的接口IID。
ppv:接口指针的地址,COM库会通过这个参数返回请求的接口。

这个函数调用之后,它将在注册表中查找CLSID,读取服务器的位置,并将服务器装入内存,最后创建一个所请求的对象实例。

返回值的测试可以使用SUCCEEDED宏来完成。


字符串的使用


在COM中使用的字符串为Unicode字符串。对于VC而言,可以使用以下方法完成字符串的ANSI转换:
1、调用API函数WideCharToMultiByte。
2、调用C Runtime函数wcstombs。
3、在MFC中,可以使用CString的构造函数或者它的复制操作符。
4、使用ATL的字符串转换宏。

如题。
无所事事。
想干点什么,但是仍麻木地坐在床上上网。
真不知道什么时候是个头。
我发现,我变懒了。

2004年05月09日

在此祝我的母亲节日快乐。

谢谢您,生我、养我、哺育我的母亲。

2004年05月08日

五一黄金周过后,最值得关注的当然就是那个名为“震荡波”的病毒了。
还是利用了一个严重漏洞,还是蠕虫攻击,还是自动关机,这一切都和“冲击波”极其相似。然而有一点不相似的是——似乎有些版本的Windows XP无法使用下面的这个补丁,包括我在学校的机器。据说,俄罗斯破解版的XP可以打这个补丁。
照此看来,如果有些朋友打不上这个补丁,那么最明智的做法就是升级你们的防火墙了。
其实在我看来,在五一期间爆发的这个病毒,它的风头盖过了黄金周。

附:“震荡波”补丁下载

2004年05月07日

带到寝室了一瓶酒,在顷刻之间化为了乌有。
现在觉得自己似乎有点无可救药了。
然而若是还有,一定还是喝。
这就是为什么很多贪官知道贪污是犯罪但是仍然贪污的原因——只是我这不属于犯罪。