/* sccsid[] = "@(#) $Id: //bas/BIN/src/proj/crfc/crreadme.txt#1 $ SAP" */
//
// SAP RFC C++ Class library.
// Copyright (C) 1996 SAP America, Inc.
// Copyright (C) 1997 SAP Technology, Inc.
// Copyright (C) 1998 SAP Labs, Inc.
// All rights reserved.

-----------------------------------------------------------------------------

		       Remote Function Call Class Library 

			   Software Development Kit 

						       Version 1.4

-----------------------------------------------------------------------------
The current version of the RFC Class Library supports All Win32 platforms, Solaris,  
HP UX, and IBM AS400.  It is built on top of the RFC Libraray, and needs the 3.0F
version of the RFC Library which should come with the R/3 release 3.0F.


For help information on the RFC Library, please refer to the Windows Help
document, saprfc.hlp, from the RFC Libraray SDK.


For programming help on the RFC Class Library, please refer to the
Windows Help document, rfcclass.hlp, contained in this SDK.

The following are the main topics of this file:

1. Contents of the RFC Class Library SDK
2. New features for 4.5B release
3. New features for 4.5A release
4. New features for 4.0B release
5. New features for 3.1H (including note of caution, please read)
6. Features added for 3.1G
7. How to compile and link a RFC program using the RFC Class Library

-----------------------------------------------------------------------------

1. Contents of the RFC Class Libraray SDK

After installing on your system the RFC Class Library SDK contains the following
directory structure and items (Assuming you installed the package under the root
directory of your C drive):

C:\crfcsdk\
	bin\
	    crclient.exe  Simple sample client executable
	    crserver.exe  Simple sample server executable
     	    sapinfoc.exe  Sample client executable
			  Mirrors sapinfo.exe in the RFC SDK
	    tcrfctst.exe  Sample transactional client executable
			  Mirrors trfctest.exe in the RFC SDK
	    scrfcsrv.exe  Sample server executable
			  Mirrors srfcserv.exe in the RFC SDK
	    tcrfcsrv.exe  Sample transactional server executable
			  Mirrors tcrfcsrv.exe in the RFC SDK
	    crremrep.exe  Sample program showing how to use the new features,
			  the new "Remove Parameter Object" and
			  "Replace Parameter Object".
	    CrCltMfc.exe  Sample program demonstrating how to use MFC 
			  with the RFC class library to create user
			  friendly GUI.  It will only works in Win32.
            CrClntTh.exe  Sample multi-threading client program.  In the
		          current version, Multithreading features only 
			  exist on Windows NT.  In other systems, it is just
			  a plain client program without multithreading.
	    CrServTh.exe  Sample multi-threading server program written with
			  RFC class library.  In the current version, 
			  Multithreading features only exist on Windows NT.  
			  In other systems, it is just a plain server program 
			  written in RFC class library without multithreading.
	lib\
	    rfcclass.lib  The RFC Class Library in static library form.
			  Release version.

	include\
	    crfclass.h    Header file for the RFC Class Library
	    crfcglob.h    Header file containing some global definitions
	    crfcconn.h    Header file for the CRfcConnection class
	    crfcfunc.h    Header file for the CRfcFunction class
	    crfcclnt.h    Header file for the CRfcClientFunc class
	    crfcserv.h    Header file for the CRfcServerFunc class
	    crfcsapp.h    Header file for the CRfcServerApp class
	    crfctran.h    Header file for the CRfcTransApp class
	    crfcimex.h    Header file for the CRfcImpExpParam class
	    crfccomp.h    Header file for the CRfcComplexParam class
	    crfcsimp.h    Header file for the CRfcSimpleParam class
	    crfcstrc.h    Header file for the CRfcStructParam class
	    crfctabl.h    Header file for the CRfcTableParam class
	    crfcdata.h    Header file for the CRfcData class
	    crfcstrn.h    Header file for the CRfcString class
	    crfclist.h    Header file for the CRfcList class

	src\
	    crfcglob.cpp  Implementation file for global functions
	    crfcconn.cpp  Implementation file for the CRfcConnection class
	    crfcfunc.cpp  Implementation file for the CRfcFunction class
	    crfcclnt.cpp  Implementation file for the CRfcClientFunc class
	    crfcserv.cpp  Implementation file for the CRfcServerFunc class
	    crfcsapp.cpp  Implementation file for the CRfcServerApp class
	    crfctran.cpp  Implementation file for the CRfcTransApp class
	    crfcimex.cpp  Implementation file for the CRfcImpExpParam class
	    crfccomp.cpp  Implementation file for the CRfcComplexParam class
	    crfcsimp.cpp  Implementation file for the CRfcSimpleParam class
	    crfcstrc.cpp  Implementation file for the CRfcStructParam class
	    crfctabl.cpp  Implementation file for the CRfcTableParam class
	    crfcdata.cpp  Implementation file for the CRfcData class
	    crfcstrn.cpp  Implementation file for the CRfcString class
	    crfclist.cpp  Implementation file for the CRfcList class
            crfccypt.cpp  Implementation file for password encryption

	samples\
            crautocl.cpp  client application using auto-created RFC function object
            crpersst.cpp  program using CRfcPersistStream to store function metadata
	    crclient.h    Header file for simple client sample.
	    crclient.cpp  Implementation file for simple client sample.
	    crserver.h    Header file for simple server sample.
	    crserver.cpp  Implementation file for simple server sample.
	    sapinfo.hpp   Header file for client sample
	    sapinfo.cpp   Implementation file for client sample
	    trfctest.hpp  Header file for transactional client sample
	    trfctest.cpp  Implementation file for transactional client sample
	    srfcserv.hpp  Header file for server sample
	    srfcserv.cpp  Implementation file for server sample
	    trfcserv.hpp  Header file for transactional server sample
	    trfcserv.cpp  Implementation file for transactional server sample
	    crfcw32.mak   A sample make file for buidling the class library
			  and sample executables using Microsoft's 32-bit
			  C/C++ compiler.  
	    crremrep.cpp  Sample program showing how to use the new "Remove Parameter
                          Object" and "Replace Parameter Object" features.
	    crremrep.h    Header file for crremrep.cpp
	    crclntth.cpp  Sample multithreading client program using RFC class library
	    crclntth.h    Header file for crclntth.cpp
	    crservth.cpp  Sample multithreading server program using RFC class library
	    crservth.h    Header file for crservth.cpp
	   
	    CrMfcReadMe.txt  Readme file on how to compile, link and run the MFC test program
            crcltdlg.cpp     A part of the MFC sample program
	    crcltdlg.h       A part of the MFC sample program
	    crcltmfc.cpp     A part of the MFC sample program
	    CrCltMfc.dsp     A part of the MFC sample program, the MSVC project file
	    crcltmfc.h       A part of the MFC sample program
	    CrCltMfc.mak     A part of the MFC sample program, mak file for command line
			     compiling and linking.
	    CrCltMfc.rc      A part of the MFC sample program, resource file
	    crhnderr.h       A part of the MFC sample program
	    crimpmdg.cpp     A part of the MFC sample program
	    crimpmdg.h       A part of the MFC sample program
	    crresrce.h       A part of the MFC sample program
	    crrfcclt.cpp     A part of the MFC sample program
	    crrfcclt.h       A part of the MFC sample program
	    crshexpm.cpp     A part of the MFC sample program
	    crshexpm.h       A part of the MFC sample program
	    crshtbpm.cpp     A part of the MFC sample program
	    crshtbpm.h       A part of the MFC sample program
	    crstdafx.cpp     A part of the MFC sample program
	    crstdafx.h       A part of the MFC sample program

	help\
	    crreadme.txt  This file
	    crfclass.hlp  SAP Online Help file for the Class Library.

2. New features for 4.5B

a.  Server applications can now be thread-safe when using RFC class library
    classes in multi-threading situations.  Please see the detailed documentation
    on how to write the multithreading server with the class library.

b.  Add CRfcServerApp::Run(int nChildThreads) member function so that a 
    multithreading RFC server can be developed rapidly with the RFC class
    library (only need to give the number of threads to start using 
    multithreading features.

c.  Add CRfcFunction::RemoveImportParam (CSTR strParamName),
    CRfcFunction::RemoveExportParam (CSTR strParamName),
    CRfcFunction::RemoveTableParam (CSTR strParamName),
    CRfcFunction::RemoveImportParam (int  nIndex),
    CRfcFunction::RemoveExportParam (int  nIndex),
    and CRfcFunction::RemoveTableParam (int  nIndex)
    to remove parameter objects.

D.  Add CRfcFunction::ReplaceImportParam (CRfcImpExpParam * newParam),
    CRfcFunction::ReplaceExportParam (CRfcImpExpParam * newParam),
    and CRfcFunction::ReplaceTableParam (CRfcTableParam * newParam)
    to replace an old parameter object with a new one.
    
3. New features for 4.5A

a. Added new class CRfcPersistStream (works only for Windows NT platform).
   This class allows CRfcClientFunc objects to store metadata information
   (parameters and fields) to a persistent stream object, and later commit
   to physical storage.  The stored metadata can be restored from physical
   storage and used for re-constructing CRfcClientFunc object.

b. Client applications can now be thread-safe when using RFC Class Library
   classes in multi-threading situations.

c. Added CRfcTableParam::InserInitializedRow() for inserting a new row into
   a table parameter where the row's fields are initialized according to
   their data types.

d. Add CRfcData::GetRawDataIntoString() to copy raw data into Standard C++
   Library's 'string' class.  Only works for Windows NT platform.


4. New features for 4.0B

a. A callback feature had been implemented for CRfcServerApp to automatically
   call the R/3 system for R/3 release version after receiving an RFC call
   from an R/3 system.  The release version would be stored in CRfcConnection
   object associated with the CRfcServerApp object, and is accessible to all
   CRfcServerFunc objects that are contained in the CRfcServerApp object.

b. If the application program desires, the CRfcConnection class has new
   implementation to obtain R/3 system information (RFC_SYSTEM_INFO) from
   the R/3 it is connected to.

5. New features for 3.1H

A.  Default use of Standard C++ Library of Microsoft Visual C++ version 5.0

For WIN32 platform, the delivered RFC Class Library is built and linked with the
Standard C++ Library (implementing the Standard Template Library) of Microsoft
Visual C++ version 5.0.
!!!CAUTION!!! This means that applications attempting to link to delivered
version of the RFC Class Library MUST USE the Standard C++ Library headers,
especially when using iostream, fstream, string functionalities.  This means
that one must #include <ios>, <iostream>, <fstream>, <string> instead of #include
<ios.h>, <iostream.h>, <fstream.h>, <string.h>.

If your existing application cannot be converted to using the Standard Template
Library, then you can rebuild the RFC Class Library by defining the macro 
"DONT_USE_STL" using the compiler option '/D'.  And when compiling and linking
your application, you also need to define that macro.

B.  Packed data type

The SAP DEC data type (Binary Coded Decimal, or BCD) is now supported.
The application program may convert integer and floating-point data
to and from this data type.

C.  Conversion between integer and SAP NUMC (Numeric Character string) data type

The SAP NUMC data type can be converted to integers and vice versa.

6. Features added for 3.1G

A. Auto-creation of client function objects and structure parameters

In this release, the RFC Class Library is capable of automatically generate
the following:

    (1) import, export, structure and table parameters for objects of
        CRfcClientFunc class.
    (2) Field information for structure (CRfcStructParam) and table
        parameters (CRfcTableParam).

However, it is important to note that the above-mentioned new functionalities
can only be used with R/3 Release 3.1G and later.  Attempt to use those features
with R/3 Release 3.0F and earlier will result in garbled information or
failure to make RFC calls.

B.  Multi-platform support

The RFC Class Library has been ported to HP UX UNIX workstation.


7. How to compile and link a RFC program using the RFC Class Library

To link using the static RFC Class Library you need to link with
(1)For Windows NT or Windows 95: librfc32.lib and rfcclass.lib;
or
(2)For HP UX workstations: librfc.a and rfcclass.a.

Note for Windows platforms: 
*** You must use Microsoft Visual C++ version 4.2 for builds
1) To make sure that the newest version of the RFC Library dll is used, you
   need to do at least one of the following:
     i) Put the librfc32.dll file included in this SDK under the local
	directory where your executables will reside.
    ii) Put it in the \WINNT35\SYSTEM32\ directory under Windows NT, or the
	\WINDOWS\SYSTEM\ directory under Windows 95 and make sure the local 
	directory mentioned in i) does not contain an older version of the dll.
   iii) Put it in any directory specified in the PATH environment varialble 
	and make sure the directories mentioned in i) and ii) do not contain
	an older version of the dll.
    iv) Search for all copies of the librfc32.dll on your machine, and replace
	with the new one.
2) You can either build your own copy of the class library with any of your
   preferred settings, or use the copy (rfcclass.lib) provided in the \lib 
   subdirectory and build your application with the -MT (multithreaded) or 
   -MTd (debug multithreaded) compile option. With Microsoft Visual C++, this
   option can be set by going to the Build --- Settings menu, C/C++ tab, Code
   Generation category, and choosing "Multithreaded DLL" or "Debug 
   Multithreaded DLL" as the "Use run-time library" option.
   Note that since the file rfcclass.lib in \lib is the release version of the
   class library, you will not be able to debug into the class library source
   code by linking with it. To be able to do so, you need to build your own copy
   of the debug version of the class library using the sources provided in the
   \src subdirectory.
3) To implement your applications, you do not need to include each one of the
   class header files one by one. Only a single header file, crfclass.h, needs
   to be included in your sources when any of the Class Library classes or
   globals is needed. 



