#define CALLCONV __stdcall
[
    //Regenerate this, stolen from GetObj.odl
    uuid(99AB80C4-5E19-4fd5-B3CA-5EF62FC3F765),
    helpstring("My Ole Guid and interface definitions"),
    lcid(0x0),
    version(1.0)
    ] 

library myole4ax
{  

    importlib("stdole2.tlb");
    interface IOleInPlaceUIWindow;

//     typedef struct
//     {
//         LONG    Left;
//         LONG    Top;
//         LONG    Right;
//         LONG    Bottom;
//     }RECT;

//     typedef struct
//     {
//         LONG  x;
//         LONG  y;
//     }POINT;

//     typedef struct
//     {
//         float  x;
//         float  y;
//     }POINTF;

//     typedef struct {
//         long hWnd;
//         long message;
//         long wParam;
//         long lParam;
//         long time;
//         POINT pt;
//     }MSG;

//     typedef [public] RECT BORDERWIDTHS;
//     typedef [public] long StructPtr;

//     typedef struct
//     {
//         LONG        cx;
//         LONG        cy;
//     }SIZE;

    typedef struct
    {
        long cb;
        long fMDIApp;
        OLE_HANDLE hwndFrame;
        OLE_HANDLE haccel;
        LONG cAccelEntries;
    }   OLEINPLACEFRAMEINFO;

        
//      [
//              uuid(00000000-0000-0000-C000-000000000046),
//              odl,
//              hidden
//      ]
//      interface IUnknownUnrestricted
//      {
//                 long QueryInterface([in] long priid, [out,in] long* pvObj);
//                 long AddRef();
//                 long Release();
//      }; 

        
    [
        uuid(00000114-0000-0000-C000-000000000046),
        odl
    ]
    interface IOleWindow : IUnknown
    {
        HRESULT GetWindow([out,retval] long *phwnd);
        HRESULT ContextSensitiveHelp([in] long fEnterMode);
    };

    [
        uuid(00000118-0000-0000-C000-000000000046),
        odl
    ]
    interface IOleClientSite : IUnknown
    {
    };

    [
        uuid(00000112-0000-0000-C000-000000000046),
        odl
    ]
    interface IOleObject : IUnknown
    {
        HRESULT SetClientSite([in] IOleClientSite *pClientSite);
        HRESULT GetClientSite([out,retval] IOleClientSite **ppClientSite);
        //Lots more.
    };

    [
        uuid(B196B289-BAB4-101A-B69C-00AA00341D07),
        odl
    ]
    interface IOleControlSite : IUnknown
    {
        HRESULT OnControlInfoChanged();
        HRESULT LockInPlaceActive([in] long fLock);
        HRESULT GetExtendedControl([out,retval] IDispatch** ppDisp);
        HRESULT TransformCoords([in] StructPtr pPtlHimetric, [in] StructPtr pPtfContainer, [in] long dwFlags);
        long TranslateAccelerator([in] StructPtr lpmsg, [in] long grfModifiers);
        HRESULT OnFocus([in] long fGotFocus);
        HRESULT ShowPropertyFrame();
    };

    [
        uuid(00000117-0000-0000-C000-000000000046),
        odl
    ]
    interface IOleInPlaceActiveObject : IOleWindow
    {
        long TranslateAccelerator([in] long lpmsg);
        long OnFrameWindowActivate([in] long fActivate);
        long OnDocWindowActivate([in] long fActivate);
        long ResizeBorder([in] StructPtr prcBorder, 
                          [in] IOleInPlaceUIWindow* pUIWindow,
                          [in] long fFrameWindow);
        long EnableModeless([in] long fEnable);
    };

    [
        uuid(00000115-0000-0000-C000-000000000046),
        odl
    ]
    interface IOleInPlaceUIWindow : IOleWindow
    {
        HRESULT GetBorder([in] StructPtr lprectBorder);
        HRESULT RequestBorderSpace([in] StructPtr pborderwidths);
        HRESULT SetBorderSpace([in] StructPtr pborderwidths);
        HRESULT SetActiveObject([in] IOleInPlaceActiveObject *pActiveObject, [in] LPWSTR pszObjName);
    };

    [
        uuid(00000116-0000-0000-C000-000000000046),
        odl
    ]
    interface IOleInPlaceFrame : IOleInPlaceUIWindow
    {
        //Not done, placeholder only
    };

    [
        uuid(00000119-0000-0000-C000-000000000046),
        odl
    ]
    interface IOleInPlaceSite : IOleWindow
    {
        long CanInPlaceActivate();
        HRESULT OnInPlaceActivate();
        HRESULT OnUIActivate();
        HRESULT GetWindowContext([out] IOleInPlaceFrame** ppFrame,
                                 [out] IOleInPlaceUIWindow** ppDoc,
                                 [in] StructPtr lprcPosRect,
                                 [in] StructPtr lprcClipRect,
                                 [in] StructPtr lpFrameInfo);
        HRESULT Scroll([in] CURRENCY scrollExtant);
        HRESULT OnUIDeactivate([in] long fUndoable);
        HRESULT OnInPlaceDeactivate();
        HRESULT DiscardUndoState();
        HRESULT DeactivateAndUndo();
        HRESULT OnPosRectChange([in] long lprcPosRect);
    }
}
