Reviews / articles about OS/2 |
Operating systems: ArcaOS, eComStation, IBM OS/2 Warp |
|
|
DATE: 2006-05-05 03:49:17 AUTHOR: Yuri Prokushev
.............. .... ...... ........ ............ .. ..... ........-................ ................ . ....... eComStation . ....... ......... ...... SOM. ...... .......... .... ...... ............. . ............ ......... ...... . ......... ......... ......., ............ .. ...... ....... . ....... ..... ..... ...... ... ........... ......... ...........:
.............., ... ........ ...... . ........-............... ................. . ........ ..... C/C++/Delphi, . ..... ....... ........ ............. ....... eComStation.
... ..... SOM?SOM (System Object Model, ......... ......... ......) - ... ......... ......, ........... .. ........... ..... ................, ............... ... ........ . ........ ........ ......... ........ SOM ............ ..... .... .. ........ .......... .......... . ....... ............ .......... ........-............... ................ (...) ......... .............. ......... . ........ ........ .......... ...... ........... ............. ............ ... .............. ................ ......... ......., ............... .......... .............. ..., ........, ......, ......... . ....... VAC, .. ..... ........ ............. Watcom ... GCC. . . ...... ...... ...... ... ..... ...... ..... ........ ...... .... ... ............. ...... . .... .. ..........., .. ...... ....... SOM ....... ... ............ ....., ......... SOM, .............. .......... ....... . ........ .. ...... ......... ..... ..... ...., SOM ............ ....... .. ...... ... ............. eComStation. ......... ......... SOM ........... . .. ............. ........... . ..... .......... . ..... ...... ................. . SOM ......... ...... ...... ........... . ....... ..... IDL (Interface Definition Language, .... ........... ..........), ....... ..... .... ............ . .......... ........... ..... ................. ..., ........, ... ............. ..... C ... ......... ......, .... IDL ..... ............ . ..... ...... .C . .H, ....... . .......... ............ ... ...... ... ......... .......... SOM ... ...... SOM. . ....... .. ........., ........... C++ ... Delphi, ...... SOM ..... .... ..... ........ . ..... ...... ...... SOM ............ . ......... ..........., . ........., ......... ........ ..... WPS (Workplace Shell) ......... ........ .. .... SOM. ..... ...., SOM ........ ..... VX-REXX . VisPro REXX. ...... ......... ...... ............. ...... SOM - ... OpenDoc. ..........., ..... .........., ............ .. WPS, ........ ........... SOM. ........ ..... .......... ........... ....... . ...... ......... ............ ........ ..... Object Desktop . xWorkplace . .......... ...... ............, ... Audio-Data CD Creator . CW Multimedia Classes. ...... SOM ..... ............ . .... DLL- ... EXE-....... ............. DLL .... ....... ........ ...... . ....... DLL WPS ........ ............... .... ............ ............. .. EXE . ... ....... . ... ....... .... ... .......... .. ........, ............ . ...... .... C++.
.............. ..........DSOM (Distributed System Object Model, .............. ......... ......... ......) ......... ........ SOM ........ . ......... .......... ... ........ ..... ......... ... .. ..... ......, ... . .. ..........., ............. . ..... ............, ..... ...... ...... ....... ......... .......... WPS ........... ..... ......., ... ... ........ ....... .... .. WPS ... ....... . .............. ........ DSOM, .. ....... WPS-.......... ........... .. ..........., ..... ...., ... . .... ...... ......... .. ........... .......... .... .......... ....., . .. ... .......... WPS ........ DSOM ............. ............ CORBA (Common Object Request Broker Architecture), ....... .......... ........ .............. ..... ........... ........... . ............ ..... ............ CORBA .... ........... ............ Object Management Group, ............ ..... 300 ........ - ........... ............ ........... . ............, . ..... ............ .. .......... . .......... ...... ... ........ ............ ....., ... .......... ... ............ ........ ............ CORBA ........ ...... ..... ........ ......... ... .............. ........., ........... OMA (Object Management Architecture, ........... .......... .........). CORBA .......... ........... .......... .......... ....... (Object Request Broker - ORB), ....... ......... ............... ..... ......... . ........... ............ ..... ORB ..... ........ ....... ..... .........., ........... .. ..... ......, ... ..... ........ . ..... DSOM ............ ..... .......... CORBA ORB. Developers Toolkit ............ . ........... ............. ......, ....... ........ "Replication Framework", ......... ....... ............ . .......... ......... ............, .... . ........ ..... ......... . ..... ............. ....... ..... ........ .. .... ...... ........ ... .... . ...... ...... ...... .. ............. ...... .......... - "Persistence Framework" - ............ ... ........, ........... .. ...... "Event Management Framework" ..... .... ............ ... ............ ........, .......... .. ........, ........ ....... ......... Presentation Manager. ....... ....., ... ....... ............ SOM .. .......... . .......... ........ .. ........ . ....... ......... ......... ..... .........
........ .................. . SOM ..... ......... ..... ........ . ...... ........ ............ ........, .. ...... ..... ..... ....... COM (Component Object Model, ............ ......... ......), .......... ........ ........... CORBA. ...... .......... .......... ...... ........ .......... ............ ...... ...... Windows ........ Microsoft. ......., ......, ... ............... COM .......... ..... .... ..... .......... . ....-.. ..... .....-...... .......... .. ....... ...... . COM ....... ........ .......... XPCOM (Cross Platform COM), ............... . ...... ....... Mozilla. . ....... .. COM, XPCOM ............... ... ........... ...... ......... ......... ............. .............. .......... ....... ........ ........, ... ....... ............... .......... Mozilla. .. ....... ..... ........ ......... .......... CORBA. .. ...... ..... .... ORBit2 - .......... CORBA ... ....... GNOME2. ...... (...., ..... ...., . ......) .... .......... MICO. ......., ........... .. ..... .. ..... ......, .... ......... ....... ...... ..... ... ........... .......... .......... ............... .. ......... ..... ................: C, C++, Delphi, Java . ...
SOM ...... C++/Delphi......, ..... .. ............ ............. . .......... ......... SOM . Toolkit, ....... .......... ...-...... SOM. ....... ....... .........., ... .......... ... ... ...... ...? SOM .......... ...... ..... ............... .. ...... .........., . .. ..... ... C++ . Delphi ...... ... ..... ............. .. ...... ........... . ...... SOM ... ........, ... ...... ......., ....... ..... ....... ..., ........, ...... ....... ....... ........... ... ...... ........ .. ..... ........... ...... .......... .. ..... .. ......... ....:
........... ...... .......... .. ........ ........ ........... .......... .... .. ........ .......... ........... ........ C++ . Delphi. ..... .......... .. ..... ......... ........ ..... ......, ... ....... .......... .. ... ..., .... ......... .. ......... ........ ...... . .............. ..... - ..... .......... . ....... dispatch-........ ...... ..... ......... ........ ...... . ........... .. ............. ............ ........... . ....... .. C++, SOM .. ......... ........... (...... ...... .......... ......., ...... .......... ...., "...............". .... . .. .. .. ..... ......) ...... .
............. ............. .. C++ ... Delphi ...... ......... ........ ......... ......... . .......... . C++ . Delphi ..... ....... ........ ........ ...... ...... . ...... ...... ........ ........... (static) ....... ....... . ...... SOM ........ ..... . .......... ........., ...... ........ ............ ..........., . ....... ........ ............ ........ ......... ........ ... ....... . ......, ........... . ....... ...... ....., ......... ..... ........ ...... . ......, ....... . C++ . Delphi .... ... ........ ......... ............, . ....... ........., ........, .............
....... ...... 1....... ....... ...... "Hello World" ......... IBM . ....... .....-...... ...... . ....... ...... . HELLO.IDL. #ifndef hello_h #define hello_h #include <somcls.idl> interface M_Hello; interface Hello : SOMObject . string hello_(); attribute string hellomsg; void sayHello(); #ifdef __SOMIDL__ implementation . releaseorder: hello_, _get_hellomsg, _set_hellomsg,sayHello; callstyle=oidl; filestem = hello; metaclass = M_Hello; somInit: override; .; #endif /* __SOMIDL__ */ .; interface M_Hello : SOMClass . attribute string ClassData; Hello HelloCreate(in string msg); // ...... ..... ....... .......... ...... Hello // . .......... ........ "msg" ... ... ............... #ifdef __SOMIDL__ implementation . releaseorder: HelloCreate,_get_ClassData,_set_ClassData; callstyle=oidl; filestem = hello; functionprefix=M_; somInitMIClass: override; somInit: override; // ...... .... ... ........ ........ ............. ...... .; #endif /* __SOMIDL__ */ .; #endif /* hello_h */ . ..... Hello ... ........ ..... void sayHello(). . ......... M_Hello ... ........ ....... string ClassData. ........... ........ ............. ........ . ........ ....... _get_ . _set_, ............... ... ......... . .......... ... ........ ............... ... .. IBM ..... .... ...... . ........ \som\samples\somk\cpp\derived SOMObjects toolkit, .... ....... SOM .... ............ ... ... ...... sayHello() ....... ..... ...... ..... ............, ... ..... .......... ...... . ...... ....... .......... ... ....... .. C++. SOM_Scope void SOMLINK sayHello(Hello *somSelf) . //... ... ....... ............. ......... ............ SOM HelloData *somThis = HelloGetData(somSelf); HelloMethodDebug("Hello","sayHello"); // ........ ......... ...... M_Hello *helloCls=(M_Hello *)somSelf->somGetClass(); somPrintf("%s .......... ...... %s\n",somSelf->_get_hellomsg(),helloCls->_get_ClassData()); . ... .. ........, ..... ...... . ...... . ......... .............. . ....... ....... _get_ . _set_ ...... ...... ............. ..... ......... ....., ...... ...... ........ . ....... ......... .. ......... .......... M_Hello. .........: M_Hello ........ ........... ... ...... Hello. . ...... ....... ........ ....... .. ..... ........ int main(int argc, char *argv[]) . Hello *a,*b,*c; // ....... ......... .......... M_Hello (........ ...... helloClsObj) M_Hello *helloClsObj=HelloNewClass(Hello_MajorVersion,Hello_MinorVersion); //......... ...... ...... helloClsObj->_set_ClassData("Class 1"); //....... ..... ...... M_Hello HelloCreate ... ........ .......... //...... Hello (....... a, b, c) a=helloClsObj->HelloCreate("...... .. ....... A"); b=helloClsObj->HelloCreate("...... .. ....... B"); c=helloClsObj->HelloCreate("...... .. ....... C"); //....... ..... sayHello ... ....... ....... a->sayHello(); b->sayHello(); c->sayHello(); // ........... ....... a->somFree(); b->somFree(); c->somFree(); return 0; . ..... .......... . ....... ......... .. ....... .........: ...... .. ....... A .......... ...... Class 1 ...... .. ....... B .......... ...... Class 1 ...... .. ....... C .......... ...... Class 1 ..... . ......... ... OpenWatcom . .... .......
....... ...... 2....... ...... ........ ......... ... .... ....... ...... ....., ... ........ ...... ...... .......... ....... ... .......... ... .... ......... ....., ... .............. . ....... ..... ........... .......... IDL. .......... ...... ........ ...: #include <somcls.idl> // ......... ........... ....... ....... interface Demo : SOMObject // ........... ...... Demo, ....... ........ ........ SOMObject . attribute string DemoWord; // .....-...... ..... ........ ...... void sayDemoWord(); // .....-...... ..... ........ ..... .; ... .., ........, ........, ..... ... ....... ............ ............., ............ ..... ...... ....... .......... ............. ......... ...... ....... ..... ........ ............ .........., .... ......... . ......... ........... ...... (........). ....... ..... ......... ..... .. ..... ........ ....... ..... ...., ... .. ....... ......... ...... ...... ......, .... .. ...... ........ ... ........... .......... ... ...... ...... ............. ..... C. ... ..... ........ .. .......... ............... ....... ... ..... ........ ... ........: sc -sh;ih;c;def demo.idl . .......... .. ........ .....:
........ ... ...... ........., ....... ..... ......... ... .......... ...... Demo, ............. ........ ........ DemoWord . ........ ..... sayDemoWord. ....... .. .. .... ......: C . C++. ... ...... ..... ....... ......., C++: // ........ ........... .......... ...... Demo ... C++ #include "demo.xh" int main(int argc, char *argv[]) . // ........ ...... .. ......... Environment *ev = somGetGlobalEnvironment(); // ....... .......... ...... Demo (....... demo1 . demo2) Demo *demo1 = new Demo; Demo *demo2 = new Demo; //............. ........ ........ DemoWord demo1->_set_DemoWord(ev, "123"); demo2->_set_DemoWord(ev, "321"); // ........ ...... sayDemoWord demo1->sayDemoWord(ev); demo2->sayDemoWord(ev); // ........... ....... delete demo1; delete demo2; // ........... return 0; . ...... ......: "... ..... .... demo.xh?". ....., ......., ......... ............. . ....... sc: sc -sxh demo.idl . .......... .. ........ .... demo.xh. ..... ....... ........, ... .. ......... Developer's Toolkit .. ........ ...... xh. .. ....... ............. . ....... ....... somxh .. ......... . .......... ........, ..... ... .......:
........ ev (.......... ... .......... ............ callstyle=oidl) ........ .. ...... ......... . ............, ........, ... ........... . ........, ..... ........... callstyle=oidl ... ......... .......... ..... ......, ..... ...... ..... ........ . .......... ... .......... ............. . CORBA . ........ ....... ............. . ..... ....... ........ SOM. ....... ...... ... ......... ..... .. ... ... ..... C: #include "demo.h" int main(int argc, char *argv[]) . // ........ ...... .. ......... Environment *ev = somGetGlobalEnvironment(); // ....... .......... ...... Demo (....... demo1 . demo2) Demo *demo1 = DemoNew(); Demo *demo2 = DemoNew(); //............. ........ ........ DemoWord Demo__set_DemoWord(demo1, ev, "123"); Demo__set_DemoWord(demo2, ev, "321"); // ........ ...... sayDemoWord Demo_sayDemoWord(demo1, ev); Demo_sayDemoWord(demo2, ev); // ........... ....... _somFree(demo1); _somFree(demo2); // ........... return 0; . ... ....., ... ............. ...... SOM .. ......... ....... . ..... ......... ........ ... ........ ...... .. ..... .... ... ... ........ ...... ....... ......... ...... ... ...... .... .. ...... ... ............ ........... ..... .. ..... C, .. ....... ............... ..... .... demo.c . ....... ........... ...: /* * This file was generated by the SOM Compiler and Emitter Framework. * Generated using template emitter: * SOM Emitter emitctm: 2.23.1.9 */ #ifndef SOM_Module_demo_Source #define SOM_Module_demo_Source #endif #define Demo_Class_Source #include "demo.ih" /* * .....-...... ..... ........ ..... */ SOM_Scope void SOMLINK sayDemoWord(Demo *somSelf, Environment *ev) . DemoData *somThis = DemoGetData(somSelf); DemoMethodDebug("Demo","sayDemoWord"); somPrintf("...... %s\n",_get_DemoWord(somSelf, ev)); . ... ....., . ..... ...... ......... ..... ......: ........ ........ ........ . ....... ... .. ...... ... .. ....... . ........ ....... ......, ... ... ...... ...... ...... somSelf ........ ......... ........ ....... somThis ............ ... ....... . ...... (.........) ....... .......... ....... ...... ............ . ........ .......... . ........ ......... ........... ... ..... ........ Makefile: CPPC = wpp386 CC = wcc386 INC = -I. -I$(SOMBASE)\include SC = $(SOMBASE)\bin\sc SCFLAGS = LINKER = wlink LDFLAGS = LIBLIST = $(SOMBASE)\lib\somtk.lib all: $(SOMBASE)\include\somxh.bld test.exe testc.exe test.exe: test.obj demo.obj $(LINKER) $(LDFLAGS) file demo.obj file test.obj library $(LIBLIST) name test.exe test.exe testc.exe: testc.obj demo.obj $(LINKER) $(LDFLAGS) file demo.obj file testc.obj library $(LIBLIST) name testc.exe testc.exe clean: .symbolic -del *.err *.obj *.exe *.map *.xh *.ih *.h $(CLEANFILES) >nul 2>&1 $(SOMBASE)\include\somxh.bld: @echo ...... ...... ....... ...... .......... C++ @echo ......... . ....... ....... somxh. @exit 1 testc.obj: test.c demo.h $(CC) $(INCLUDEPATH) $(CCFLAGS) $[ -fo=testc.obj test.obj: test.cpp demo.xh $(CPPC) $(INCLUDEPATH) $(CPPCFLAGS) $[ demo.obj: demo.c demo.ih $(CC) $(INCLUDEPATH) $(CCFLAGS) $[ demo.ih: demo.idl demo.h $(SC) -sih $(SCFLAGS) $[ demo.h: demo.idl $(SC) -sh $(SCFLAGS) $[ demo.xh: demo.idl $(SC) -sxh $(SCFLAGS) $[ ..... .... ... ...... ......... ........ ....... wmake, .. ....... ... .....: test.exe . testc.exe. ...... - .......... .. C++, ...... - .. C. ........ . ....... ............. .........: ...... 123 ...... 321 ......., ... .. ..... .......... .. ....... ......... .............., ............ ...., ... .. ...... ....... ............ ........ . ...... .......... ....... ....... ............ .. ...... ......, ... .......... ....... ....... ... ..... ........... ...... ............ ".. . ... ..?" - ...... .. ........ - ". ... .. .......... .......?". ....... ........ ..... ........... ... ..... ...... ...... ... ........... . Makefile: CPPC = wpp386 CC = wcc386 INC = -I. -I$(SOMBASE)\include SC = $(SOMBASE)\bin\sc SCFLAGS = LINKER = wlink LDFLAGS = LIBLIST = $(SOMBASE)\lib\somtk.lib all: $(SOMBASE)\include\somxh.bld test.exe testc.exe testdll.exe test.exe: test.obj demo.obj $(LINKER) $(LDFLAGS) file demo.obj file test.obj library $(LIBLIST) name test.exe test.exe testc.exe: testc.obj demo.obj $(LINKER) $(LDFLAGS) file demo.obj file testc.obj library $(LIBLIST) name testc.exe testc.exe testdll.exe: testdll.obj demo.lib demo.dll $(LINKER) $(LDFLAGS) file testdll.obj library $(LIBLIST) library demo.lib name testdll.exe testdll.exe demo.dll: demodll.obj demoinit.obj demo.def $(LINKER) format os2 lx dll initinstance $(LDFLAGS) file demodll.obj file demoinit.obj library $(LIBLIST) name demo.dll export DemoCClassData, DemoClassData, DemoNewClass, SOMInitModule demo.lib: demo.def implib $@ $[ clean: .symbolic -del *.dll *.def *.lib *.err *.obj *.exe *.map *.xh *.ih *.h $(CLEANFILES) >nul 2>&1 $(SOMBASE)\include\somxh.bld: @echo ...... ...... ....... ...... .......... C++ @echo ......... . ....... ....... somxh. @exit 1 testc.obj: test.c demo.h $(CC) $(INCLUDEPATH) $(CCFLAGS) $[ -fo=testc.obj testdll.obj: testdll.c demo.h $(CC) $(INCLUDEPATH) $(CCFLAGS) $[ test.obj: test.cpp demo.xh $(CPPC) $(INCLUDEPATH) $(CPPCFLAGS) $[ demo.obj: demo.c demo.ih $(CC) $(INCLUDEPATH) $(CCFLAGS) $[ demodll.obj: demo.c demo.ih $(CC) $(INCLUDEPATH) $(CCFLAGS) -bd $[ -fo=demodll.obj demoinit.obj: demoinit.c demo.ih $(CC) $(INCLUDEPATH) $(CCFLAGS) -bd $[ demo.ih: demo.idl demo.h $(SC) -u -sih $(SCFLAGS) $[ demo.h: demo.idl $(SC) -sh $(SCFLAGS) $[ demo.xh: demo.idl $(SC) -sxh $(SCFLAGS) $[ demo.def: demo.idl $(SC) -sdef $(SCFLAGS) $[ . .......... .. ........ .......... demo.dll . ...... ......., . . testdll.exe ..... ...... ............. ...... ........... ......., ... ... ........ .......... .......... .............. ..... 3 (!) ......., ..... .......... ...... .. ..... ....... . ...... ............. . DSOM ... ObjectREXX ... ........... ........ ... .... ......., ....... ..... .............. ..... (..... .., ......... .. .. .... .......). ..... ...., ... .......... DSOM . ObjectREXX ... ........... ...... ...... . ...... . ........... ........... (......... - . ......... ........). ...... ...... . ...... . ........... ........... ..... . ....... ..... -u ........... SOM . ........ IR. ........ ...... ..... ....... . ........ ........ .............. .. ObjectREXX: /* ...... - ...... ... .... ...... . ....... */ parse version . rxlevel . if rxlevel<='4.00' then do say '... .......... ....... ....... ......... ObjectREXX' exit end /* ....... ....... */ a=.Demo~new b=.Demo~new /* ............. ........ */ a~_set_DemoWord('123') b~_set_DemoWord('321') /* ........ */ a~sayDemoWord b~sayDemoWord /* ....... .......... .. ...., REXX ... .. ...... */ /* .............. ...... SOM */ ::Class Demo Public EXTERNAL 'SOM Demo' ..... . ......... ... OpenWatcom . .... .......
. ......... ......... ....... ............ . ........ ............ . ........ SOM. ..... .. ......... ....... .......... ..... ....... . ...... INI . ........ ... . .... .......... ........ .............. ..........:
Komentarze:
|
|
||||||||||||||||||||||||||||||||
(C) OS2.GURU 2001-2021