Index: trunk/src/ole32/moniker.h
===================================================================
--- trunk/src/ole32/moniker.h	(revision 290)
+++ trunk/src/ole32/moniker.h	(revision 290)
@@ -0,0 +1,64 @@
+/*
+ * moniker.h [OLE32]
+ *
+ * Private include for Running Object Table (ROT) implementation class
+ */
+
+#if !defined(MONIKER_INCLUDED)
+#define MONIKER_INCLUDED
+
+#define ROT_BLOCK_SIZE	50
+
+// ROT Element
+struct RunObject
+{
+    IUnknown *	pObj;			// object
+    IMoniker *	pmkObj;			// moniker who identifies this object
+    FILETIME	lastModifObj;		// Last modified date/time
+    DWORD	identRegObj;		// registration key relative to this object
+    DWORD      	regTypeObj;		// registration type : strong or weak
+};
+
+// Implementation structure for ROT
+struct RunningObjectTableImpl
+{
+    ICOM_VTABLE(IRunningObjectTable)*  lpvtbl;
+    ULONG      	ref;
+
+    RunObject * runObjTab;            	// First object
+    DWORD      	runObjTabSize;		// ROT size
+    DWORD      	runObjTabLastIndx;	// First free ROT entry
+    DWORD      	runObjTabRegister;	// Registration key of the next registred object
+};
+
+// Initialisation
+extern HRESULT RunningObjectTableImpl_Initialize();
+extern HRESULT RunningObjectTableImpl_UnInitialize();
+
+static HRESULT Destroy();
+static HRESULT GetObjectIndex(RunningObjectTableImpl * This, DWORD identReg, IMoniker * pmk, DWORD * indx);
+
+static HRESULT WIN32API RunningObjectTableImpl_QueryInterface
+    (IRunningObjectTable * iface,REFIID riid,void** ppvObject);
+static ULONG   WIN32API RunningObjectTableImpl_AddRef
+    (IRunningObjectTable * iface);
+static ULONG   WIN32API RunningObjectTableImpl_Release
+    (IRunningObjectTable * iface);
+static HRESULT WIN32API RunningObjectTableImpl_Register
+    (IRunningObjectTable * iface, DWORD grfFlags, IUnknown * punkObject,
+     IMoniker * pmkObjectName, DWORD* pdwRegister);
+static HRESULT WIN32API RunningObjectTableImpl_Revoke
+    (IRunningObjectTable * iface, DWORD dwRegister);
+static HRESULT WIN32API RunningObjectTableImpl_IsRunning
+    (IRunningObjectTable * iface, IMoniker * pmkObjectName);
+static HRESULT WIN32API RunningObjectTableImpl_GetObject
+    (IRunningObjectTable * iface, IMoniker * pmkObjectName, IUnknown * * ppunkObject);
+static HRESULT WIN32API RunningObjectTableImpl_NoteChangeTime
+    (IRunningObjectTable * iface, DWORD dwRegister, FILETIME * pfiletime);
+static HRESULT WIN32API RunningObjectTableImpl_GetTimeOfLastChange
+    (IRunningObjectTable * iface, IMoniker * pmkObjectName, FILETIME * pfiletime);
+static HRESULT WIN32API RunningObjectTableImpl_EnumRunning
+    (IRunningObjectTable * iface, IEnumMoniker * * ppenumMoniker);
+
+#endif // MONIKER_INCLUDED
+
Index: trunk/src/ole32/oString.h
===================================================================
--- trunk/src/ole32/oString.h	(revision 289)
+++ trunk/src/ole32/oString.h	(revision 290)
@@ -3,12 +3,13 @@
 #define OSTRING_INCLUDED
 
-class oStringA
+class oStringBase
 {
-private:
-    LPSTR	m_strBuf;	// Buffer for string data.
-    
+protected:
+    char *	m_strBuf;	// Buffer.
+
     long	m_bufLen;	// Current allocated length
-    				// of buffer
+    				// of buffer (bytes)
     				
+    long	m_bytePerChar;	// Number of bytes per character.
     long	m_strLen;	// Length of string 
     				// incl. zero terminator
@@ -18,10 +19,15 @@
     static long blockSize;
 
-protected:
+    oStringBase(long bytePerChar);
+    virtual ~oStringBase();
+
     void freeBuf();
     void getBuf(long newLen);
     void adjBuf(long newLen);
     long calcBufLen(long newLen);
+};
 
+class oStringA : public oStringBase
+{
 public:
     oStringA(void);
@@ -29,13 +35,14 @@
     oStringA(LPCWSTR pUnicode);
     oStringA(LPCSTR pAscii);
+    oStringA(REFCLSID pclsId);
     oStringA(const oStringA &ref);
-    virtual ~oStringA();
 
     operator LPSTR();
 
-    // Equality
+    // Assignment
     oStringA operator =  (const oStringA & string);
     oStringA operator =  (LPCSTR pAscii);
     oStringA operator =  (LPCWSTR pUnicode);
+    oStringA operator =  (REFCLSID pClsId);
 
     // Concatenation
@@ -44,5 +51,5 @@
     oStringA operator +  (LPCWSTR pUnicode);
 
-    // Concatenation
+    // Concatenation & Assignment.
     oStringA operator += (const oStringA & string);
     oStringA operator += (LPCSTR pAscii);
@@ -51,3 +58,37 @@
 };
 
+class oStringW : public oStringBase
+{
+public:
+    oStringW(void);
+    oStringW(int defLen);
+    oStringW(LPCWSTR pUnicode);
+    oStringW(const wchar_t * pUnicode);
+    oStringW(LPCSTR pAscii);
+    oStringW(REFCLSID pclsId);
+    oStringW(const oStringW &ref);
+
+    operator LPWSTR();
+
+    // Assignment
+    oStringW operator =  (const oStringW & string);
+    oStringW operator =  (LPCSTR pAscii);
+    oStringW operator =  (LPCWSTR pUnicode);
+    oStringW operator =  (const wchar_t * pUnicode);
+    oStringW operator =  (REFCLSID pClsId);
+
+    // Concatenation
+    oStringW operator +  (const oStringW & string);
+    oStringW operator +  (LPCSTR pAscii);
+    oStringW operator +  (LPCWSTR pUnicode);
+    oStringW operator +  (const wchar_t * pUnicode);
+
+    // Concatenation & Assignment.
+    oStringW operator += (const oStringW & string);
+    oStringW operator += (LPCSTR pAscii);
+    oStringW operator += (LPCWSTR pUnicode);
+    oStringW operator += (const wchar_t * pUnicode);
+
+};
+
 #endif // OSTRING_INCLUDED
Index: trunk/src/ole32/ole32.h
===================================================================
--- trunk/src/ole32/ole32.h	(revision 289)
+++ trunk/src/ole32/ole32.h	(revision 290)
@@ -15,5 +15,5 @@
 
 // ><DJR 17.05.99 Force to use C-interfaces for now to prevent CALLBACK definition compiler error
-#define CINTERFACE
+#define CINTERFACE 1
 
 // ><DJR 17.05.99 Move standard includes to before os2win.h [memcmp]
@@ -23,6 +23,8 @@
 #include <string.h>
 #include <memory.h>
+#include <wchar.h>
 
 // ><DJR 17.05.99 Prevent CALLCONV becoming _System
+#include <win/wtypes.h>
 #include <winbase.h>
 #include <uconv.h>
