| H's profile什么PhotosBlogLists | Help |
|
3/10/2006 备查——元素周期表
3/6/2006 春暧花未开 南京的天气喜怒无常,前几天刚刚下过鸭毛大雪,这两天气温又开始飙升。怎奈我不争气,喉咙发炎,头疼,脖子疼,还发烧。我想起来就对自己摇头——哎,老了!早晨睡到8:40还不想起来,真想就这么睡过去,睡到明天早上。可是……(没有原因,糊里糊涂的)就起来了。起来浑身难受,脖子和耳朵后面上还起了小包。胡乱收拾一下决定跑去校医院看看。挂了号(5年来第二次在校医院挂号,本科的医疗费都浪费了),来到2楼。外科的门全都关着,我探头探脑看了半天确定大夫确实有空,我才推门进去。大夫阿姨在旁边拿起了一只吃龙虾、香辣蟹用的塑料手套在我脖子上和脑后按了好一会,坐下来镇静的对我说:“去省人民医院门疹大厅问一下导医台的人,问一下就知道挂哪科了。”……我一小小蒙,你连看哪科都不知道啊!我心底蹦出4个字,你个SB,破口而出……的却是:”谢谢大夫“-。|||这就是咱博士大人的修养。
省人民医是我再熟悉不过的地方了。从去年五一开始我就没少到那报到。不过看到我的人很多都会觉得我不应该会得病啊,可是事实就是事实。其实我也挺无奈的,哦,对了,应该说那是相当无奈!(师兄左的教导)又扯远了。来到院里(这样称呼既亲切又省事)轻车熟路,在一堆毫无排队意识的患者中间迅速挂了号。一看,号单和原来不一样了!于是不禁感叹到,果然是大医院啊!想我们在黄山实习时还用60年代的表格呢!拿着单子杀到2楼外科(其实我对急诊外科更熟一点),胡乱找了位人最少的大夫。这里有必要说明一下,不了解省院的人大概不知道,一般来说,病人经常见到四种大夫:急诊(实习)值班大夫,普通大夫,专家,高级专家。最重要的区分方式是挂号费不同。正因为如此,在这边随便找哪个人看都一样,反正你来复诊他也不会等着你。又跑题了的说……大夫什么工具也没带,用手随便按了几下,让我转转脖子,问我有没有发炎什么的。最后说,是淋巴节,发炎引起的。吃点消炎药就行了……
不严重当然好了,不过却实很疼,直接导致之后我两晚失眠,三晚半失眠。痛苦。
回到学校本来应该去上课,不过对于这种事我从来都不热心,所以一点也不急。因为发炎的关系,一直发烧,所以还穿着大衣。毕竟是春天了,被太阳一照,身上多少还是有点热。那点热就是春天的感觉~
难得会一个人在学校里乱晃,还真发现了不少东东。每天都在学校里走过,对很多东西都已经熟视无睹。其实我们的校园还是很精彩的,一年到头都在不断的变化着。就像三水三电那的几株竹子,分布在校园各处的几棵腊梅,石头缝里的野花……说是春暧花未开,只是那些最引人注意,最着人喜欢的那些花。事实上腊梅那毫不起眼的小花和一些野花已经开始悄悄地开放了,即使没人注意。
3/4/2006 关于COM和.NET的一些问题
COM 组件设计与应用(一)[转]COM 组件设计与应用(一) 一、前言
以上两个方案,都有严重的缺陷,怎么解决那?如果能有一个新方案,能够合并前两个方案的优点,消灭缺点,该多好呀......微软是作磁盘操作系统起家的,于是很自然地他们提出了一个非常完美的设计方案,那就是把磁盘文件的管理方式移植到文件中了------复合文件,俗称“文件中的文件系统”。连微软当年都没有想到,就这么一个简单的想法,居然最后就演变出了 COM 组件程序设计的方法。可以说,复合文件是 COM 的基石。下图是磁盘文件组织方式与复合文件组织方式的类比图:
四、浏览复合文件
为了让大家快速地浏览和掌握基本方法,上面所列表的函数并不是全部,我省略了“事务”函数和未实现函数部分。更全面的介绍,请阅读 MSDN。 void SampleCreateDoc()
{
::CoInitialize(NULL); // COM 初始化
// 如果是MFC程序,可以使用AfxOleInit()替代
HRESULT hr; // 函数执行返回值
IStorage *pStg = NULL; // 根存储接口指针
IStorage *pSub = NULL; // 子存储接口指针
IStream *pStm = NULL; // 流接口指针
hr = ::StgCreateDocfile( // 建立复合文件
L"c:\\a.stg", // 文件名称
STGM_CREATE | STGM_WRITE | STGM_SHARE_EXCLUSIVE, // 打开方式
0, // 保留参数
&pStg); // 取得根存储接口指针
ASSERT( SUCCEEDED(hr) ); // 为了突出重点,简化程序结构,所以使用了断言。
// 在实际的程序中则要使用条件判断和异常处理
hr = pStg->CreateStorage( // 建立子存储
L"SubStg", // 子存储名称
STGM_CREATE | STGM_WRITE | STGM_SHARE_EXCLUSIVE,
0,0,
&pSub); // 取得子存储接口指针
ASSERT( SUCCEEDED(hr) );
hr = pSub->CreateStream( // 建立流
L"Stm", // 流名称
STGM_CREATE | STGM_WRITE | STGM_SHARE_EXCLUSIVE,
0,0,
&pStm); // 取得流接口指针
ASSERT( SUCCEEDED(hr) );
hr = pStm->Write( // 向流中写入数据
"Hello", // 数据地址
5, // 字节长度(注意,没有写入字符串结尾的\0)
NULL); // 不需要得到实际写入的字节长度
ASSERT( SUCCEEDED(hr) );
if( pStm ) pStm->Release();// 释放流指针
if( pSub ) pSub->Release();// 释放子存储指针
if( pStg ) pStg->Release();// 释放根存储指针
::CoUninitialize() // COM 释放
// 如果使用 AfxOleInit(),则不调用该函数
}![]() 图二、运行示例程序一后,使用 DFView.exe 打开观察复合文件的效果图 示例二:打开一个复合文件,枚举其根存储下的所有对象。 #include <atlconv.h> // ANSI、MBCS、UNICODE 转换
void SampleEnum()
{ // 假设你已经做过 COM 初始化了
LPCTSTR lpFileName = _T( "c:\\a.stg" );
HRESULT hr;
IStorage *pStg = NULL;
USES_CONVERSION; // (注6)
LPCOLESTR lpwFileName = T2COLE( lpFileName ); // 转换T类型为宽字符
hr = ::StgIsStorageFile( lpwFileName ); // 是复合文件吗?
if( FAILED(hr) ) return;
hr = ::StgOpenStorage( // 打开复合文件
lpwFileName, // 文件名称
NULL,
STGM_READ | STGM_SHARE_DENY_WRITE,
0,
0,
&pStg); // 得到根存储接口指针
IEnumSTATSTG *pEnum=NULL; // 枚举器
hr = pStg->EnumElements( 0, NULL, 0, &pEnum );
ASSERT( SUCCEEDED(hr) );
STATSTG statstg;
while( NOERROR == pEnum->Next( 1, &statstg, NULL) )
{
// statstg.type 保存着对象类型 STGTY_STREAM 或 STGTY_STORAGE
// statstg.pwcsName 保存着对象名称
// ...... 还有时间,长度等很多信息。请查看 MSDN
::CoTaskMemFree( statstg.pwcsName ); // 释放名称所使用的内存(注6)
}
if( pEnum ) pEnum->Release();
if( pStg ) pStg->Release();
}六、小结复合文件,结构化存储,是微软组件思想的起源,在此基础上继续发展出了持续性、命名、ActiveX、对象嵌入、现场激活......一系列的新技术、新概念。因此理解和掌握 复合文件是非常重要的,即使在你的程序中并没有全面使用组件技术,复合文件技术也是可以单独被应用的。祝大家学习快乐,为社会主义软件事业而奋斗:-) 留作业啦...... 作业1:写个小应用程序,从 MSWORD 的 doc 文件中,提取出附加信息(作者、公司......)。 作业2:写个全功能的“复合文件浏览编辑器”。 注1:踅摸(xuemo),动词,北方方言,寻找搜索的意思。 注2:问:为什么不上网查资料学习? 答:开什么国际玩笑!在那遥远的1995年代,我的500块工资,不吃不喝正好够上100小时的Internet网。 注3:OLE,对象的连接与嵌入。 注4:可以用 DFView.exe 打开 MSWORD 的 DOC 文件进行复合文件的浏览。但是该程序并没有实现国际化,不能打开中文文件名的复合文件,因此需要改名后才能浏览。 注5:CLSID,在后续的文章中介绍。 注6:关于 COM 中内存使用的问题,在后续的文章中介绍。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|