[
  uuid(4992BB40-FCA6-11D3-ADDB-BCAF427C7F50), 
  version(1.0), 
  helpstring("ZodiacServer Library")
    
]
library ZodiacServer
{

  importlib("stdole2.tlb");

  ...

   interface IZodiac: IDispatch
  {
    [
    id(0x00000001)
    ]
    HRESULT _stdcall GetZodiacSign([in] long Day, [in] long Month, [out, retval] BSTR * Sign );
    [
    id(0x00000002)
    ]
    HRESULT _stdcall GetZodiacSignAsync([in] long Day, [in] long Month );
  };

  ...

   dispinterface IZodiacEvents
  {
    properties:
    methods:
    [
    id(0x00000001)
    ]
    HRESULT OnZodiacSignReady([in] BSTR Sign );
  };

  ...

  typedef struct tagTDetailedZodiacSign
  {
    BSTR Sign;
    long House;
    BSTR Element;
    BSTR Planet;
    BSTR Details;
    BSTR Advice;
  } TDetailedZodiacSign;

  ...

  coclass Zodiac
  {
    [default] interface IZodiac;
    [default, source] dispinterface IZodiacEvents;
    interface IDetailedZodiac;
    [source] interface IDetailedZodiacEvents;
  };


  ...

   interface IDetailedZodiac: IUnknown
  {
    [
    id(0x00000001)
    ]
    HRESULT _stdcall GetDetailedZodiacSign([in] long Day, [in] long Month, [out] TDetailedZodiacSign * DetailedSign );
    [
    id(0x00000002)
    ]
    HRESULT _stdcall GetDetailedZodiacSignAsync([in] long Day, [in] long Month );
  };

  ...

   interface IDetailedZodiacEvents: IUnknown
  {
    [
    id(0x00000002)
    ]
    HRESULT _stdcall OnDetailedZodiacSignReady([in] TDetailedZodiacSign * DetailedSign );
  };

};