Readme.txt
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:9k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. Portable Windows Libary
  2. =======================
  3. Contents
  4. --------
  5. 1. Introduction
  6. 2. Apologies
  7. 3. CVS Access
  8. 4. Building PWLib
  9. 5. Using PWLib
  10. Introduction
  11. ------------
  12. PWLib is a moderately large class library that has its genesis many years ago as
  13. a method to product applications to run on both Microsoft Windows and Unix
  14. X-Windows systems. It also was to have a Macintosh port as well but this never
  15. eventuated.
  16. Since then the system has grown to having quite good application to areas other
  17. than mere Windows GUI portability. Classes for I/O portability, multi-threading
  18. portability, aid in producing unix daemons and NT services portably and all
  19. sorts of internet protocols were added over the years.
  20. All this over and above basic "container" classes such as arrays, linear lists,
  21. sorted lists (RB Tree) and dictionaries (hash tables) which were all created
  22. before STL became the answer to all our prayers. Unfortunately, due to intertia
  23. and the GNU C++ inadequate support of templates, this library will probably not
  24. be ported to STL in the near future.
  25. The library was used extensively for all our in-house products. Then we decided
  26. to support the open H323 project by throwing in some of the code written for
  27. one of our products. Thus, required PWLib so it got thrown into the open source
  28. world as well.
  29. Apologies (not)
  30. ---------------
  31. As you start using the library, the inevitable question "why did they do it that
  32. way?" will come up. The more experienced out there will know that there are
  33. several reasons for the way things are:
  34.    *   Carefully considered design,
  35.    *   Workarounds for portability and compiler subtleties,
  36.    *   History, it may be too hard to change an early design decision,
  37.    *   Complete arbitrariness, the absence of any compelling reason.
  38. So, when you ask the next question "why didn't you do it this way?" The answer
  39. will be one of the above. The last one being a synonym for "we didn't think of
  40. that!"
  41. The bottom line is, use the library as is or change it as you require. You can
  42. even send in suggestions for improvements (or merely changes) and we may (or may
  43. not) include them in the base line code. Just do not send us any mail starting
  44. with the words "Why did you..." as the answer is quite likely to be "Because!"
  45. CVS Access
  46. ----------
  47. There is a public CVS archive available at cvs.openh323.org. Note that there are
  48. still some parts of PWLib that are not available, so make sure you use the
  49. modules provided for check out and do not just try and check out "pwlib" on it's
  50. own. If you do all you will get is this file.
  51. The modules available are:
  52. ptlib_unix
  53. pwlib_xlib
  54. ptlib_win32
  55. pwlib_win32
  56. Building PWLib
  57. --------------
  58. For Windows.
  59. 1. Start MSVC (v5 or v6). If you have another compiler you are on your 
  60.         own!  Go into the Tools menu, Options item, Directories tab and add 
  61. to the Include files path:
  62. C:PWLibIncludePwLibMSWIN      (if have full version)
  63. C:PWLibIncludePtLibMSOS
  64. C:PWLibInclude
  65. and add to the Lib Files path and the Executable Files path the
  66. following:
  67. C:PWLibLib
  68.         Also make sure this directory is in your PATH environment variable.
  69. 2. Open the pwlib.dsw file in the pwlib top directory. If you have the
  70. minimum library it will come up with several requests to find .dsp
  71. files, just cancel past these.
  72. 3. Note you will need bison and flex to compile the system. You can get 
  73. a copy from http://www.openh323.org/bin/flexbison.zip, follow the 
  74. instructions included in that package and put the executables 
  75. somewhere in your path.
  76. 4. Use the Batch Build command and build the "ASNParser - Win32 Release",
  77.         "pwtest - Win32 Release" and "pwtest - Win32 Debug" targets. make sure
  78.         all other targets are not checked.
  79. 5. That it, you are now on your own!
  80. For unix.
  81. 1. If you have not put pwlib it into your home directory (~/pwlib) then
  82. you will have to defined the environment variable PWLIBDIR to point to
  83. the correct directory.
  84.         Also make sure you have added the $PWLIBDIR/lib directory to your 
  85.         LD_LIBRARY_PATH environment variable if you intend to use shared 
  86.         libraries (the default).
  87. 2. Build the debug and release versions of the PWLib library as follows:
  88. cd ~/pwlib
  89. make both
  90. This may take some time. Note, you will need bison and flex for this to
  91. compile, most unix systems have these. WARNING: there is a bug in most 
  92. of the bison.simple files. See below for details.
  93. PWLib requires GNU Make. If GNU Make (gmake) is not your default make
  94. program (eg FreeBSD users), you will need to install GNU Make first
  95. and then use
  96. cd ~/pwlib
  97. gmake both
  98. If you are getting huge numbers of errors during the compile, then it 
  99.         is likely your platform is not supported, or you have incorrectly set 
  100.         the OSTYPE and MACHTYPE variables.
  101. 3. That's all there is to it, you are now on your own!
  102. Bison problem under Unix
  103. The bison.simple file on many releases will not compile with the options used 
  104. by the PWLib getdate.y grammar. The options are required to make the date 
  105. parser thread safe so it is necessary to edit the bison.simple file to fix the 
  106. problem.
  107. The file is usually at /usr/lib/bison.simple but in the tradition of unix 
  108. could actually be anywhere. We leave it up to you to find it.
  109. The code:
  110. /* Prevent warning if -Wstrict-prototypes. */
  111. #ifdef __GNUC__
  112. int yyparse (void);
  113. #endif
  114. should be changed to
  115. /* Prevent warning if -Wstrict-prototypes. */
  116. #ifdef __GNUC__
  117. #ifndef YYPARSE_PARAM
  118. int yyparse (void);
  119. #endif
  120. #endif
  121. To prevent the incorrect function prototype from being defined. The getdate.y 
  122. should then produce a getdate.tab.c file that will actually compile.
  123. Using PWLib
  124. -----------
  125. What documentation there is consists of this document and all of the header
  126. files. It was intended that a post processer go through the header files and
  127. produces HTML help files, but this never got completed.
  128. Detailed tutorials will almost certainly not be forthcoming. However, at least
  129. giving you an indication on how to start an application would be usefull, so
  130. here is the infamous "Hello world!" program.
  131. // hello.cxx
  132. #include <ptlib.h>
  133. class Hello : public PProcess
  134. {
  135.   PCLASSINFO(Hello, PProcess)
  136.   public:
  137.     void Main();
  138. };
  139. PCREATE_PROCESS(Hello)
  140. void Hello::Main()
  141. {
  142.   cout << "Hello world!n";
  143. }
  144. // End of hello.cxx
  145. The CREATE_PROCESS macro actually defines the main() function and creates an
  146. instance of Hello. This assures that everything is initialised in the correct
  147. order. C++ does initialisation of global statics badly (and destruction is even
  148. worse), so try to put everything into your PProcess descedent rather than
  149. globals.
  150. A GUI application is very similar but is descended off PApplication rather than
  151. PProcess, and would create a window as a descendent off the PMainWindow class.
  152. The following is a simple Makefile for Unix platforms for the hello world 
  153. program.
  154. # Simple makefile for PTLib
  155. PROG    = hello
  156. SOURCES = hello.cxx
  157. ifndef PWLIBDIR
  158. PWLIBDIR=$(HOME)/pwlib
  159. endif
  160. include $(PWLIBDIR)/make/ptlib.mak
  161. # End of Makefile
  162. PWlib Classes
  163. =============
  164. The classes in PWLib fall into the following broad categories
  165. Containers
  166. I/O
  167. Threads & Processes
  168. GUI
  169. Containers
  170. While there are a number of container classes you wourld rarely actually descend
  171. off them, you would use macros that declare type safe descendents. These are
  172. simply templates instantiations when using a compiler that supports templates
  173. in a simple manner (GNU C++ does not qualify in our opinion).
  174. I/O
  175. There are many classes descendend from a basic primitive call a PChannel, which
  176. represents an entity for doing I/O. There are classes for files, serial ports,
  177. various types of socket and pipes to sub-processes.
  178. Threads & Processes
  179. These classes support lightweight threading and functionality to do with the
  180. process as a whole (for example argument parsing). The threading will be
  181. pre-emptive on platforms that support it (Win32, pthreads) and cooperative on
  182. those that don't (eg Linux at the time of writing).
  183. GUI
  184. There are a very large number of classes to support a GUI interface. This is not
  185. very complete at this time. The Win32 implementation is quite usable, though it
  186. doesn't include the latest and greatest out of Redmond. The pure xlib
  187. implementation has quite a lot implemented but is by no means complete. A motif
  188. implementation is in the works but has not progressed very far.
  189. Conclusion
  190. ----------
  191. This package is far from a "product". There is very limited documentation and
  192. support will be on an ad-hoc basis, send us an e-mail and we will probably
  193. answer your question if it isn't too difficult.
  194. It is supplied mainly to support the open H323 project, but that shouldn't stop
  195. you from using it in whatever project you have in mind if you so desire. We like
  196. it and use it all the time, and we don't want to get into any religious wars of
  197. this class library over that one.
  198. ================================================================================
  199. Equivalence Pty. Ltd.
  200. Home of FireDoor, MibMaster & PhonePatch
  201. support@equival.com.au
  202. http://www.equival.com.au (US Mirror - http://www.equival.com)
  203. Fax: +61 2 4368 1395   Voice: +61 2 4368 2118