找回密码
 欢迎注册
搜索
热搜: 活动 交友 discuz
查看: 2189|回复: 7

在Cache中使用宏

[复制链接]
发表于 2003-4-13 13:47:48 | 显示全部楼层 |阅读模式
对Cache的研究不断深入,发现系统类库中,使用最多的是宏,因此,有必要对Cache中宏进行仔细学习。
 楼主| 发表于 2003-4-13 13:56:05 | 显示全部楼层

在Cache中使用宏

定义宏
1.数字替换 #Define NumberMacro 22
2.字符替换 #Define StringMacro "Hello World"
3.变量替换 #Define VariableMacro Variable
4.命令和参数 #Define CommangArgumentMacro(%Arg) Write %Arg,!
5.函数,表达式,操作符 # Define FunctionExpressionOperatorMacro ($ZDate(+$Horolog))
6.引用其它宏 #define ReferenceOtherMacroMacro Write $$$FunctionExpressionOperatorMacro
7.宏保存在*.INC文件中。
 楼主| 发表于 2003-4-13 14:07:00 | 显示全部楼层

在Cache中使用宏

调用宏
1.引用宏文件有两种方式:#include MyMacro或#IncludeGenerator MyMethodGeneratorMacros后者定义在方法生成器使用的宏。
2.直接在宏名前加“$$$”就可以调用字符和数字宏值及表达式宏。
3.变量宏需要先给变量付值。
4.命令宏加上参数
5.可以使用#IF #ELSE IF #ELSE #ENDIF定义有条件宏。
 楼主| 发表于 2003-4-14 11:10:18 | 显示全部楼层

在Cache中使用宏

系统宏
1.在系统类库中,我们可以看到很多宏定义,学习和理解这些宏,对我们深入学习Cache很有用。
2.在系统宏中,我们看到了很多表达式,有些很容易懂,有些使用了系统函数、系统变量、系统Global、其它系统宏等,它们的作用主要有:常量替换、函数包装、命令包装等,目的是可重用和便于修改。
3.%ref,应该是指向内存的句柄,系统宏中很多地方使用它来获取内存中的参数值,理解%ref,需要我们对Cache在内存中的存贮结构和深入了解?
4.正因为系统使用了很多宏,并且宏之间还相互调用和包括,这为我们理解系统类库造成了很多困难。
5.%systemInclude可能是最高级的宏,它包括了六个其它宏定义。这六个宏分别定义了直接访问的常量、系统范围值、有关事物控制的宏、有关SQL的宏、有关CSP的宏、还相其它核心宏。
6.%occInclude,包括了其它22个"%occ"打头的宏,因此它可能是一个比较核心的宏。
%occOptions可选项;
%occConstant系统常量;
%occKeyword关键词,这个宏由系统自动生成;
%occProcedure程序宏;
%occReference对系统的几个Global的值的参引;
%occCompiler为编译器定义的;
%occReference2由系统自动生成的参引宏;
%occLocation位置宏;
%occXXX是一个生成宏;
%occObject有关对象的宏;
%occOID有关OID的宏;
%occFlag标记宏;
%occEnvironment统一的环境变量及值的宏;
%occMessages有关系统消息的宏;
%occErrors定义了错误号;
%occStatus状态宏;
%occDiagnostics对象诊断宏;
%occBuild定义了版本和编译时间;
%occName有关名称的宏;
%occClassname类名及包名有关的宏;
%occFunctions包装了几个函数功能;
%occVersion版本宏。
7.除了以上提到的,Cache一般为系统的每个功能模块都定义了宏。这说明宏在实现类库时经常要用到,我们设计HL7V3DT时,也应当要用到一个或多个相关的宏,或调用系统的宏来实现某些底层功能。
8.但要完全看懂并能使用系统定义的这么多宏是很不易的,这需要对Cache系统的设计有很彻底的了解,不知谁能在这方面给我一些帮助?或提示到那里去找相关资料!
 楼主| 发表于 2003-4-14 14:23:42 | 显示全部楼层

在Cache中使用宏

分析%RegisteredObject类:
1.%RegisteredObject提供了在内存中操作对象的基本功能(包括在内存中创建和删除OREFs,支持多态,动态调入参引对象等),它是所有类的祖先,所以为了深入研究Cache,决定先研究它。
2.参数:CAPTION用于Caché Form Wizard;
        JAVATYPE用于输出为Java类;
        PROPERTYVALIDATION属性验证,不主张用这个参数,0不验证,1 set时调用..IsValid,2 对象存贮时调用%ValidateObject。
3.类方法%ClassName(Arg),Arg为真时返回全名,假时为短名。
4.实例方法%Close,当对象的被参引数为0时,1).调用%OnClose 2).关闭对其它对角的参引 3).消除其占用的所有内存资源。
5.实例方法%Destruct,在对象清除时由系统调用的方法,也就是系统接致到对象的%Close方法后,实际调用的就是%Destruct方法。
6.实例方法%ConstructClone,实现对象本身的复制。这是一个很复杂的方法,看懂它很不容易!
7.类方法%GetParameter,获得运行时的参数值。
8.类方法IsA(isclass),返回这个类的实例是否同时也是isclass类的实例。
9.实例方法%IsModified,实例是否修改过。
10.实例方法%SetModified,设置实例已经修改。
11.实例方法%IncrementCount,增加实例的被参引数。
12.类方法%New,在内存中创建新的实例。
13.实例方法%Construct,初始化所有实例变量。
14.实例方法%NormalizeObject(),正式化属性值,数据类型中定义的%Normalize方法在这里调用!
15.实例方法%ObjectModified(),类似%IsModified(),但它还判断参引对象否已修改。
16.类方法%PackageName,返回包的名称。
17.实例方法%AddToSaveSet,构建一个需存贮的对象对列。
18.实例方法%RemoveFromSaveSet,从存贮对列中移出对象。
19.实例方法%SerializeObject,序列化所有参引的序列对象。
20.实例方法%ValidateObject,在类存贮时验证属性值。
21.实例方法%OnAddToSaveSet,由%AddToSaveSet调用,指示对象是否已包括在存贮对列中。
22.实例方法%OnClose(),由%Close调用,提示当前实例是否已Close。
23.%OnConstructClone、%OnNew、%OnValidateObject同理。
24.通过对%RegisteredObject的研究,发现了CACHELIB中的系统Global对系统的功能很重要,如果能正确详细地理解这个系统Global的结构,那么对那些系统宏和系统类型的理解将会很容易。
25.我们发现了数据类型定义中..IsValidDT、Normalize这两个方法在系统自动调用的地方,这对我们理解数据类型的实现很有用!
 楼主| 发表于 2003-4-14 17:01:18 | 显示全部楼层

在Cache中使用宏

CACHELIB中的系统Global研究。
1.上面以经提到CACHELIB中的系统Global对我们理解Cache和深入研究Cache很重要。它存贮了大量系统数据,定义了很多系统结构,系统宏最终都是对这些Global中的数据以及结构的包装。
2.^%qCacheMsg是系统消息的存贮地,%occMessages宏,定义了有关消息的一些操作。
3.^%qCacheMsgNames按名称是存贮消息名称的,但没有看到哪个宏对它有操作?
4.^%qCacheObjectCDL存贮Cache对象的类定义语言,在%occCodeGen中有对它的包装。
5.^%qCacheObjectKey存贮系统中用到的关键字,在%occLocation中定义了对它的包装。
6.^%qCacheObjectSys存贮了系统的一些重要信息,在%cspBuild、%occMGInfo、%occOptions、%occReffence、%qccKeyword中有用到。
7.^%qCacheSQL定义了SQL相关的信息,在%msql、%qaqplex、%SqlCode中都有用到。
8.^%qCspRule存贮了CSP规则,包装在%cspBuild中。
9.^%qHTMLElementD好象是%qHTMLElement类的存贮结构,没有相关宏。
10.^%qStream,可能跟Stream有关,但没有相关的宏定义。
11.^%qStudioTemplate,可能是Cache Studio使用的。
12.^%Sys存贮一些系统参数或数据,在%cspBuild、%msql、%occActivate、%occMessages、%occOptions、%ooProcess、%qccKeyworks、%qsc等多个宏中有用到。
(未完待续)
 楼主| 发表于 2003-4-14 20:22:36 | 显示全部楼层

在Cache中使用宏

13.^mcq,在%server中的logerr中有用到。
14.^mdd在%msql中用到。
15.^mtemp在%qsc中用到。
16.^oddDEF,存贮类的定义,在%occCompiler,%occLocation,%occReference,%occReferenceStorage,occVersion中都有用到,它对类的实现非常重要。
17.^oddCOM,存贮类的定义,在%occCompiler,%occLocation,%occMginfo等宏中用到
18.^oddMAP,在%occExtent,%occLocation中用到。
19.^oddPROC,在%occProcedure,中用到。
20.^rINC,存贮系统INC文件。
21.^rINDEX,INC文件索引
22.^rINDEXCLASS,^rOBJ,^ROUTINE,^UTILITY等在宏中都没有用到。
23.Cache系统是以M技术为基础,以Global为存贮机制。其面向对象的特征是通过类和例程来实现在,而类和例程的设计是以上面这些系统Global和宏来具体实现的。理解了Global和系统宏,对我们实现HL7V3DT是非常有用的。
发表于 2003-4-14 23:00:12 | 显示全部楼层

在Cache中使用宏

***** 版主模式 *****
该贴子是管理员从<a href=forums.cgi?forum=4>HL7研究</a>转移过来的!
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

快速回复 返回顶部 返回列表