Developer's Notes.


[Overview]

    Welcome to the world of UNICODE!  32bit OLE2 is now a native UNICODE
    subsystem for Microsoft's Win32 platforms.  OLE2ANSI is a .DLL that will
    'thunk' existing ANSI OLE2 APIs and Interfaces in your current application
    to/from UNICODE.

    While this sample code does make converting existing ANSI OLE2 application
    to UNICODE OLE2 almost painless; it does exact some overhead.  If at all
    possible, ANSI applications should be ported to UNICODE.

    OLE2ANSI is NOT part of the OLE2 subsystem, it's sample code of how a
    generic ANSI <--> UNICODE thunk for OLE2 could be written.  Feel free to
    use fragments of code for you development needs.


[Using Ole2Ansi.Dll]

    1. Change the "TARGET = ole2ansi" value in the file 'makefile' to an
        unique name to avoid conflicts.  Any references to "OLE2ANSI" in
        this 'readme.txt' file actually refers to your unique target name.

    2. Build the Ole2Ansi sample code with the provided 'makefile'.

    3. Add -DOLE2ANSI to your application's compiler option list.

    4. Add OLE2ANSI.LIB to your application's link library list.  OLE2ANSI.LIB
        must be placed before OLE32.LIB and OLEAUT32.LIB.

    5. Recompile/link your application.


[Suggestions for performance enhancements]

    1. Use UNICODE strings where possible to avoid some (or all) wrapped API's and
        interfaces.

    2. Manually wrap interfaces via Ole2AnsiWFromA and retain for the life of the
        ANSI object.   Pass the wrapped interface (which are now UNICODE) directly
        to OLE2's APIs and methods.

    3. Merge the Ole2Ansi source in your application.  Note that you will need to
        rename some of the OLE2 APIs in your source code.   For example, if your
        application calls CLSIDFromString(), it will need to be changed to
        CLSIDFromStringA().


[Release Notes]

	1. Ole2Ansi will now detect bad applications that do the following and recover.
			CreateObject(&pObj);
			pObj->QI(IID_IUnknown, &pUnk);
			pUnk->Release();
			pUnk->Release();

	     A message will be displayed to the debugger.

        2. Added two new API's to permit convertion of Interfaces to/from ANSI/UNICODE:
			HRESULT Ole2AnsiAFromW(REFIID iid, LPUNKNOWN pWide, LPUNKNOWN * pANSI);
			HRESULT Ole2AnsiWFromA(REFIID iid, LPUNKNOWN pANSI, LPUNKNOWN * pWide);

        3. Must set HKEY_CURRENT_USER\Software\Microsoft\Ole2Ansi\Trace to DWORD Hex FFFF to
	    enable Ole2Ansi tracing.


	
