/*** Autogenerated by WIDL 9.8 from include/windows.devices.geolocation.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __windows_devices_geolocation_h__
#define __windows_devices_geolocation_h__

#ifndef __WIDL_INLINE
#if defined(__cplusplus) || defined(_MSC_VER)
#define __WIDL_INLINE inline
#elif defined(__GNUC__)
#define __WIDL_INLINE __inline__
#endif
#endif

/* Forward declarations */

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator ABI::Windows::Devices::Geolocation::IGeolocator
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                interface IGeolocator;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition ABI::Windows::Devices::Geolocation::IGeoposition
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                interface IGeoposition;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate ABI::Windows::Devices::Geolocation::IGeocoordinate
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                interface IGeocoordinate;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs ABI::Windows::Devices::Geolocation::IPositionChangedEventArgs
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                interface IPositionChangedEventArgs;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs ABI::Windows::Devices::Geolocation::IStatusChangedEventArgs
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                interface IStatusChangedEventArgs;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress ABI::Windows::Devices::Geolocation::ICivicAddress
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                interface ICivicAddress;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CGeolocator_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CGeolocator_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                class Geolocator;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CGeolocation_CGeolocator __x_ABI_CWindows_CDevices_CGeolocation_CGeolocator;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CGeolocation_CGeolocator_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CGeoposition_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CGeoposition_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                class Geoposition;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CGeolocation_CGeoposition __x_ABI_CWindows_CDevices_CGeolocation_CGeoposition;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CGeolocation_CGeoposition_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CGeocoordinate_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CGeocoordinate_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                class Geocoordinate;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CGeolocation_CGeocoordinate __x_ABI_CWindows_CDevices_CGeolocation_CGeocoordinate;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CGeolocation_CGeocoordinate_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CPositionChangedEventArgs_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CPositionChangedEventArgs_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                class PositionChangedEventArgs;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CGeolocation_CPositionChangedEventArgs __x_ABI_CWindows_CDevices_CGeolocation_CPositionChangedEventArgs;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CGeolocation_CPositionChangedEventArgs_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CStatusChangedEventArgs_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CStatusChangedEventArgs_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                class StatusChangedEventArgs;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CGeolocation_CStatusChangedEventArgs __x_ABI_CWindows_CDevices_CGeolocation_CStatusChangedEventArgs;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CGeolocation_CStatusChangedEventArgs_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CCivicAddress_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CCivicAddress_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                class CivicAddress;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CGeolocation_CCivicAddress __x_ABI_CWindows_CDevices_CGeolocation_CCivicAddress;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CGeolocation_CCivicAddress_FWD_DEFINED__ */

#ifndef ____FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_FWD_DEFINED__
#define ____FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_FWD_DEFINED__
typedef interface __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition;
#ifdef __cplusplus
#define __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition ABI::Windows::Foundation::IAsyncOperationCompletedHandler<ABI::Windows::Devices::Geolocation::Geoposition* >
#endif /* __cplusplus */
#endif

#ifndef ____FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_FWD_DEFINED__
#define ____FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_FWD_DEFINED__
typedef interface __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition;
#ifdef __cplusplus
#define __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Devices::Geolocation::Geoposition* >
#endif /* __cplusplus */
#endif

#ifndef ____FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_FWD_DEFINED__
#define ____FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_FWD_DEFINED__
typedef interface __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs;
#ifdef __cplusplus
#define __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Devices::Geolocation::Geolocator*,ABI::Windows::Devices::Geolocation::PositionChangedEventArgs* >
#endif /* __cplusplus */
#endif

#ifndef ____FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_FWD_DEFINED__
#define ____FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_FWD_DEFINED__
typedef interface __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs;
#ifdef __cplusplus
#define __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Devices::Geolocation::Geolocator*,ABI::Windows::Devices::Geolocation::StatusChangedEventArgs* >
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <inspectable.h>
#include <asyncinfo.h>
#include <eventtoken.h>
#include <windowscontracts.h>
#include <windows.foundation.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __cplusplus
typedef enum __x_ABI_CWindows_CDevices_CGeolocation_CPositionAccuracy __x_ABI_CWindows_CDevices_CGeolocation_CPositionAccuracy;
#endif /* __cplusplus */

#ifndef __cplusplus
typedef enum __x_ABI_CWindows_CDevices_CGeolocation_CPositionStatus __x_ABI_CWindows_CDevices_CGeolocation_CPositionStatus;
#endif /* __cplusplus */

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator ABI::Windows::Devices::Geolocation::IGeolocator
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                interface IGeolocator;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition ABI::Windows::Devices::Geolocation::IGeoposition
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                interface IGeoposition;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate ABI::Windows::Devices::Geolocation::IGeocoordinate
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                interface IGeocoordinate;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs ABI::Windows::Devices::Geolocation::IPositionChangedEventArgs
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                interface IPositionChangedEventArgs;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs ABI::Windows::Devices::Geolocation::IStatusChangedEventArgs
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                interface IStatusChangedEventArgs;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress ABI::Windows::Devices::Geolocation::ICivicAddress
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                interface ICivicAddress;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_FWD_DEFINED__
#define ____FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_FWD_DEFINED__
typedef interface __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition;
#ifdef __cplusplus
#define __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Devices::Geolocation::Geoposition* >
#endif /* __cplusplus */
#endif

#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifdef __cplusplus
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                enum PositionAccuracy {
                    PositionAccuracy_Default = 0,
                    PositionAccuracy_High = 1
                };
            }
        }
    }
}
extern "C" {
#else
enum __x_ABI_CWindows_CDevices_CGeolocation_CPositionAccuracy {
    PositionAccuracy_Default = 0,
    PositionAccuracy_High = 1
};
#ifdef WIDL_using_Windows_Devices_Geolocation
#define PositionAccuracy __x_ABI_CWindows_CDevices_CGeolocation_CPositionAccuracy
#endif /* WIDL_using_Windows_Devices_Geolocation */
#endif

#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifdef __cplusplus
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                enum PositionStatus {
                    PositionStatus_Ready = 0,
                    PositionStatus_Initializing = 1,
                    PositionStatus_NoData = 2,
                    PositionStatus_Disabled = 3,
                    PositionStatus_NotInitialized = 4,
                    PositionStatus_NotAvailable = 5
                };
            }
        }
    }
}
extern "C" {
#else
enum __x_ABI_CWindows_CDevices_CGeolocation_CPositionStatus {
    PositionStatus_Ready = 0,
    PositionStatus_Initializing = 1,
    PositionStatus_NoData = 2,
    PositionStatus_Disabled = 3,
    PositionStatus_NotInitialized = 4,
    PositionStatus_NotAvailable = 5
};
#ifdef WIDL_using_Windows_Devices_Geolocation
#define PositionStatus __x_ABI_CWindows_CDevices_CGeolocation_CPositionStatus
#endif /* WIDL_using_Windows_Devices_Geolocation */
#endif

#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
/*****************************************************************************
 * IGeolocator interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator, 0xa9c3bf62, 0x4524, 0x4989, 0x8a,0xa9, 0xde,0x01,0x9d,0x2e,0x55,0x1f);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                MIDL_INTERFACE("a9c3bf62-4524-4989-8aa9-de019d2e551f")
                IGeolocator : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_DesiredAccuracy(
                        enum PositionAccuracy *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_DesiredAccuracy(
                        enum PositionAccuracy value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_MovementThreshold(
                        DOUBLE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_MovementThreshold(
                        DOUBLE value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_ReportInterval(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_ReportInterval(
                        UINT32 value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_LocationStatus(
                        enum PositionStatus *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE GetGeopositionAsync(
                        ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Devices::Geolocation::Geoposition* > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE GetGeopositionAsyncWithAgeAndTimeout(
                        struct TimeSpan maximum_age,
                        struct TimeSpan timeout,
                        ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Devices::Geolocation::Geoposition* > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE add_PositionChanged(
                        ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Devices::Geolocation::Geolocator*,ABI::Windows::Devices::Geolocation::PositionChangedEventArgs* > *handler,
                        EventRegistrationToken *token) = 0;

                    virtual HRESULT STDMETHODCALLTYPE remove_PositionChanged(
                        EventRegistrationToken token) = 0;

                    virtual HRESULT STDMETHODCALLTYPE add_StatusChanged(
                        ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Devices::Geolocation::Geolocator*,ABI::Windows::Devices::Geolocation::StatusChangedEventArgs* > *handler,
                        EventRegistrationToken *token) = 0;

                    virtual HRESULT STDMETHODCALLTYPE remove_StatusChanged(
                        EventRegistrationToken token) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator, 0xa9c3bf62, 0x4524, 0x4989, 0x8a,0xa9, 0xde,0x01,0x9d,0x2e,0x55,0x1f)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocatorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        TrustLevel *trustLevel);

    /*** IGeolocator methods ***/
    HRESULT (STDMETHODCALLTYPE *get_DesiredAccuracy)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        enum __x_ABI_CWindows_CDevices_CGeolocation_CPositionAccuracy *value);

    HRESULT (STDMETHODCALLTYPE *put_DesiredAccuracy)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        enum __x_ABI_CWindows_CDevices_CGeolocation_CPositionAccuracy value);

    HRESULT (STDMETHODCALLTYPE *get_MovementThreshold)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        DOUBLE *value);

    HRESULT (STDMETHODCALLTYPE *put_MovementThreshold)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        DOUBLE value);

    HRESULT (STDMETHODCALLTYPE *get_ReportInterval)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *put_ReportInterval)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        UINT32 value);

    HRESULT (STDMETHODCALLTYPE *get_LocationStatus)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        enum __x_ABI_CWindows_CDevices_CGeolocation_CPositionStatus *value);

    HRESULT (STDMETHODCALLTYPE *GetGeopositionAsync)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition **value);

    HRESULT (STDMETHODCALLTYPE *GetGeopositionAsyncWithAgeAndTimeout)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        struct __x_ABI_CWindows_CFoundation_CTimeSpan maximum_age,
        struct __x_ABI_CWindows_CFoundation_CTimeSpan timeout,
        __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition **value);

    HRESULT (STDMETHODCALLTYPE *add_PositionChanged)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs *handler,
        EventRegistrationToken *token);

    HRESULT (STDMETHODCALLTYPE *remove_PositionChanged)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        EventRegistrationToken token);

    HRESULT (STDMETHODCALLTYPE *add_StatusChanged)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs *handler,
        EventRegistrationToken *token);

    HRESULT (STDMETHODCALLTYPE *remove_StatusChanged)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *This,
        EventRegistrationToken token);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocatorVtbl;

interface __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator {
    CONST_VTBL __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocatorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IGeolocator methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_get_DesiredAccuracy(This,value) (This)->lpVtbl->get_DesiredAccuracy(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_put_DesiredAccuracy(This,value) (This)->lpVtbl->put_DesiredAccuracy(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_get_MovementThreshold(This,value) (This)->lpVtbl->get_MovementThreshold(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_put_MovementThreshold(This,value) (This)->lpVtbl->put_MovementThreshold(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_get_ReportInterval(This,value) (This)->lpVtbl->get_ReportInterval(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_put_ReportInterval(This,value) (This)->lpVtbl->put_ReportInterval(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_get_LocationStatus(This,value) (This)->lpVtbl->get_LocationStatus(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_GetGeopositionAsync(This,value) (This)->lpVtbl->GetGeopositionAsync(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_GetGeopositionAsyncWithAgeAndTimeout(This,maximum_age,timeout,value) (This)->lpVtbl->GetGeopositionAsyncWithAgeAndTimeout(This,maximum_age,timeout,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_add_PositionChanged(This,handler,token) (This)->lpVtbl->add_PositionChanged(This,handler,token)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_remove_PositionChanged(This,token) (This)->lpVtbl->remove_PositionChanged(This,token)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_add_StatusChanged(This,handler,token) (This)->lpVtbl->add_StatusChanged(This,handler,token)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_remove_StatusChanged(This,token) (This)->lpVtbl->remove_StatusChanged(This,token)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_QueryInterface(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_AddRef(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_Release(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_GetIids(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_GetTrustLevel(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IGeolocator methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_get_DesiredAccuracy(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,enum __x_ABI_CWindows_CDevices_CGeolocation_CPositionAccuracy *value) {
    return This->lpVtbl->get_DesiredAccuracy(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_put_DesiredAccuracy(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,enum __x_ABI_CWindows_CDevices_CGeolocation_CPositionAccuracy value) {
    return This->lpVtbl->put_DesiredAccuracy(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_get_MovementThreshold(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,DOUBLE *value) {
    return This->lpVtbl->get_MovementThreshold(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_put_MovementThreshold(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,DOUBLE value) {
    return This->lpVtbl->put_MovementThreshold(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_get_ReportInterval(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,UINT32 *value) {
    return This->lpVtbl->get_ReportInterval(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_put_ReportInterval(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,UINT32 value) {
    return This->lpVtbl->put_ReportInterval(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_get_LocationStatus(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,enum __x_ABI_CWindows_CDevices_CGeolocation_CPositionStatus *value) {
    return This->lpVtbl->get_LocationStatus(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_GetGeopositionAsync(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,__FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition **value) {
    return This->lpVtbl->GetGeopositionAsync(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_GetGeopositionAsyncWithAgeAndTimeout(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,struct __x_ABI_CWindows_CFoundation_CTimeSpan maximum_age,struct __x_ABI_CWindows_CFoundation_CTimeSpan timeout,__FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition **value) {
    return This->lpVtbl->GetGeopositionAsyncWithAgeAndTimeout(This,maximum_age,timeout,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_add_PositionChanged(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,__FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs *handler,EventRegistrationToken *token) {
    return This->lpVtbl->add_PositionChanged(This,handler,token);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_remove_PositionChanged(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,EventRegistrationToken token) {
    return This->lpVtbl->remove_PositionChanged(This,token);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_add_StatusChanged(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,__FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs *handler,EventRegistrationToken *token) {
    return This->lpVtbl->add_StatusChanged(This,handler,token);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_remove_StatusChanged(__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator* This,EventRegistrationToken token) {
    return This->lpVtbl->remove_StatusChanged(This,token);
}
#endif
#ifdef WIDL_using_Windows_Devices_Geolocation
#define IID_IGeolocator IID___x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator
#define IGeolocatorVtbl __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocatorVtbl
#define IGeolocator __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator
#define IGeolocator_QueryInterface __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_QueryInterface
#define IGeolocator_AddRef __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_AddRef
#define IGeolocator_Release __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_Release
#define IGeolocator_GetIids __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_GetIids
#define IGeolocator_GetRuntimeClassName __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_GetRuntimeClassName
#define IGeolocator_GetTrustLevel __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_GetTrustLevel
#define IGeolocator_get_DesiredAccuracy __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_get_DesiredAccuracy
#define IGeolocator_put_DesiredAccuracy __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_put_DesiredAccuracy
#define IGeolocator_get_MovementThreshold __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_get_MovementThreshold
#define IGeolocator_put_MovementThreshold __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_put_MovementThreshold
#define IGeolocator_get_ReportInterval __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_get_ReportInterval
#define IGeolocator_put_ReportInterval __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_put_ReportInterval
#define IGeolocator_get_LocationStatus __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_get_LocationStatus
#define IGeolocator_GetGeopositionAsync __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_GetGeopositionAsync
#define IGeolocator_GetGeopositionAsyncWithAgeAndTimeout __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_GetGeopositionAsyncWithAgeAndTimeout
#define IGeolocator_add_PositionChanged __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_add_PositionChanged
#define IGeolocator_remove_PositionChanged __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_remove_PositionChanged
#define IGeolocator_add_StatusChanged __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_add_StatusChanged
#define IGeolocator_remove_StatusChanged __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_remove_StatusChanged
#endif /* WIDL_using_Windows_Devices_Geolocation */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IGeoposition interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition, 0xc18d0454, 0x7d41, 0x4ff7, 0xa9,0x57, 0x9d,0xff,0xb4,0xef,0x7f,0x5b);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                MIDL_INTERFACE("c18d0454-7d41-4ff7-a957-9dffb4ef7f5b")
                IGeoposition : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_Coordinate(
                        ABI::Windows::Devices::Geolocation::IGeocoordinate **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_CivicAddress(
                        ABI::Windows::Devices::Geolocation::ICivicAddress **value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition, 0xc18d0454, 0x7d41, 0x4ff7, 0xa9,0x57, 0x9d,0xff,0xb4,0xef,0x7f,0x5b)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CGeolocation_CIGeopositionVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition *This,
        TrustLevel *trustLevel);

    /*** IGeoposition methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Coordinate)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition *This,
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate **value);

    HRESULT (STDMETHODCALLTYPE *get_CivicAddress)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition *This,
        __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress **value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CGeolocation_CIGeopositionVtbl;

interface __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition {
    CONST_VTBL __x_ABI_CWindows_CDevices_CGeolocation_CIGeopositionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IGeoposition methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_get_Coordinate(This,value) (This)->lpVtbl->get_Coordinate(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_get_CivicAddress(This,value) (This)->lpVtbl->get_CivicAddress(This,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_QueryInterface(__x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_AddRef(__x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_Release(__x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_GetIids(__x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_GetTrustLevel(__x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IGeoposition methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_get_Coordinate(__x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition* This,__x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate **value) {
    return This->lpVtbl->get_Coordinate(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_get_CivicAddress(__x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition* This,__x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress **value) {
    return This->lpVtbl->get_CivicAddress(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Geolocation
#define IID_IGeoposition IID___x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition
#define IGeopositionVtbl __x_ABI_CWindows_CDevices_CGeolocation_CIGeopositionVtbl
#define IGeoposition __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition
#define IGeoposition_QueryInterface __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_QueryInterface
#define IGeoposition_AddRef __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_AddRef
#define IGeoposition_Release __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_Release
#define IGeoposition_GetIids __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_GetIids
#define IGeoposition_GetRuntimeClassName __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_GetRuntimeClassName
#define IGeoposition_GetTrustLevel __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_GetTrustLevel
#define IGeoposition_get_Coordinate __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_get_Coordinate
#define IGeoposition_get_CivicAddress __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_get_CivicAddress
#endif /* WIDL_using_Windows_Devices_Geolocation */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IGeocoordinate interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate, 0xee21a3aa, 0x976a, 0xac70, 0x80,0x3d, 0x08,0x3e,0xa5,0x5b,0xcb,0xc4);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                MIDL_INTERFACE("ee21a3aa-976a-ac70-803d-083ea55bcbc4")
                IGeocoordinate : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_Latitude(
                        DOUBLE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Longitude(
                        DOUBLE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Altitude(
                        ABI::Windows::Foundation::IReference<DOUBLE > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Accuracy(
                        DOUBLE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_AltitudeAccuracy(
                        ABI::Windows::Foundation::IReference<DOUBLE > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Heading(
                        ABI::Windows::Foundation::IReference<DOUBLE > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Speed(
                        ABI::Windows::Foundation::IReference<DOUBLE > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Timestamp(
                        struct DateTime *value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate, 0xee21a3aa, 0x976a, 0xac70, 0x80,0x3d, 0x08,0x3e,0xa5,0x5b,0xcb,0xc4)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinateVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate *This,
        TrustLevel *trustLevel);

    /*** IGeocoordinate methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Latitude)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate *This,
        DOUBLE *value);

    HRESULT (STDMETHODCALLTYPE *get_Longitude)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate *This,
        DOUBLE *value);

    HRESULT (STDMETHODCALLTYPE *get_Altitude)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate *This,
        __FIReference_1_DOUBLE **value);

    HRESULT (STDMETHODCALLTYPE *get_Accuracy)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate *This,
        DOUBLE *value);

    HRESULT (STDMETHODCALLTYPE *get_AltitudeAccuracy)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate *This,
        __FIReference_1_DOUBLE **value);

    HRESULT (STDMETHODCALLTYPE *get_Heading)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate *This,
        __FIReference_1_DOUBLE **value);

    HRESULT (STDMETHODCALLTYPE *get_Speed)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate *This,
        __FIReference_1_DOUBLE **value);

    HRESULT (STDMETHODCALLTYPE *get_Timestamp)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate *This,
        struct __x_ABI_CWindows_CFoundation_CDateTime *value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinateVtbl;

interface __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate {
    CONST_VTBL __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinateVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IGeocoordinate methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Latitude(This,value) (This)->lpVtbl->get_Latitude(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Longitude(This,value) (This)->lpVtbl->get_Longitude(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Altitude(This,value) (This)->lpVtbl->get_Altitude(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Accuracy(This,value) (This)->lpVtbl->get_Accuracy(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_AltitudeAccuracy(This,value) (This)->lpVtbl->get_AltitudeAccuracy(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Heading(This,value) (This)->lpVtbl->get_Heading(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Speed(This,value) (This)->lpVtbl->get_Speed(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Timestamp(This,value) (This)->lpVtbl->get_Timestamp(This,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_QueryInterface(__x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_AddRef(__x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_Release(__x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_GetIids(__x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_GetTrustLevel(__x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IGeocoordinate methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Latitude(__x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate* This,DOUBLE *value) {
    return This->lpVtbl->get_Latitude(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Longitude(__x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate* This,DOUBLE *value) {
    return This->lpVtbl->get_Longitude(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Altitude(__x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate* This,__FIReference_1_DOUBLE **value) {
    return This->lpVtbl->get_Altitude(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Accuracy(__x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate* This,DOUBLE *value) {
    return This->lpVtbl->get_Accuracy(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_AltitudeAccuracy(__x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate* This,__FIReference_1_DOUBLE **value) {
    return This->lpVtbl->get_AltitudeAccuracy(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Heading(__x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate* This,__FIReference_1_DOUBLE **value) {
    return This->lpVtbl->get_Heading(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Speed(__x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate* This,__FIReference_1_DOUBLE **value) {
    return This->lpVtbl->get_Speed(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Timestamp(__x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate* This,struct __x_ABI_CWindows_CFoundation_CDateTime *value) {
    return This->lpVtbl->get_Timestamp(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Geolocation
#define IID_IGeocoordinate IID___x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate
#define IGeocoordinateVtbl __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinateVtbl
#define IGeocoordinate __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate
#define IGeocoordinate_QueryInterface __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_QueryInterface
#define IGeocoordinate_AddRef __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_AddRef
#define IGeocoordinate_Release __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_Release
#define IGeocoordinate_GetIids __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_GetIids
#define IGeocoordinate_GetRuntimeClassName __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_GetRuntimeClassName
#define IGeocoordinate_GetTrustLevel __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_GetTrustLevel
#define IGeocoordinate_get_Latitude __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Latitude
#define IGeocoordinate_get_Longitude __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Longitude
#define IGeocoordinate_get_Altitude __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Altitude
#define IGeocoordinate_get_Accuracy __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Accuracy
#define IGeocoordinate_get_AltitudeAccuracy __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_AltitudeAccuracy
#define IGeocoordinate_get_Heading __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Heading
#define IGeocoordinate_get_Speed __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Speed
#define IGeocoordinate_get_Timestamp __x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_get_Timestamp
#endif /* WIDL_using_Windows_Devices_Geolocation */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CGeolocation_CIGeocoordinate_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IPositionChangedEventArgs interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs, 0x37859ce5, 0x9d1e, 0x46c5, 0xbf,0x3b, 0x6a,0xd8,0xca,0xc1,0xa0,0x93);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                MIDL_INTERFACE("37859ce5-9d1e-46c5-bf3b-6ad8cac1a093")
                IPositionChangedEventArgs : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_Position(
                        ABI::Windows::Devices::Geolocation::IGeoposition **value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs, 0x37859ce5, 0x9d1e, 0x46c5, 0xbf,0x3b, 0x6a,0xd8,0xca,0xc1,0xa0,0x93)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs *This,
        TrustLevel *trustLevel);

    /*** IPositionChangedEventArgs methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Position)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs *This,
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition **value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgsVtbl;

interface __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs {
    CONST_VTBL __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IPositionChangedEventArgs methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_get_Position(This,value) (This)->lpVtbl->get_Position(This,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_QueryInterface(__x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_AddRef(__x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_Release(__x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_GetIids(__x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_GetTrustLevel(__x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IPositionChangedEventArgs methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_get_Position(__x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs* This,__x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition **value) {
    return This->lpVtbl->get_Position(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Geolocation
#define IID_IPositionChangedEventArgs IID___x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs
#define IPositionChangedEventArgsVtbl __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgsVtbl
#define IPositionChangedEventArgs __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs
#define IPositionChangedEventArgs_QueryInterface __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_QueryInterface
#define IPositionChangedEventArgs_AddRef __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_AddRef
#define IPositionChangedEventArgs_Release __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_Release
#define IPositionChangedEventArgs_GetIids __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_GetIids
#define IPositionChangedEventArgs_GetRuntimeClassName __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_GetRuntimeClassName
#define IPositionChangedEventArgs_GetTrustLevel __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_GetTrustLevel
#define IPositionChangedEventArgs_get_Position __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_get_Position
#endif /* WIDL_using_Windows_Devices_Geolocation */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IStatusChangedEventArgs interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs, 0x3453d2da, 0x8c93, 0x4111, 0xa2,0x05, 0x9a,0xec,0xfc,0x9b,0xe5,0xc0);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                MIDL_INTERFACE("3453d2da-8c93-4111-a205-9aecfc9be5c0")
                IStatusChangedEventArgs : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_Status(
                        enum PositionStatus *value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs, 0x3453d2da, 0x8c93, 0x4111, 0xa2,0x05, 0x9a,0xec,0xfc,0x9b,0xe5,0xc0)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs *This,
        TrustLevel *trustLevel);

    /*** IStatusChangedEventArgs methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Status)(
        __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs *This,
        enum __x_ABI_CWindows_CDevices_CGeolocation_CPositionStatus *value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgsVtbl;

interface __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs {
    CONST_VTBL __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IStatusChangedEventArgs methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_get_Status(This,value) (This)->lpVtbl->get_Status(This,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_QueryInterface(__x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_AddRef(__x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_Release(__x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_GetIids(__x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_GetTrustLevel(__x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IStatusChangedEventArgs methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_get_Status(__x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs* This,enum __x_ABI_CWindows_CDevices_CGeolocation_CPositionStatus *value) {
    return This->lpVtbl->get_Status(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Geolocation
#define IID_IStatusChangedEventArgs IID___x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs
#define IStatusChangedEventArgsVtbl __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgsVtbl
#define IStatusChangedEventArgs __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs
#define IStatusChangedEventArgs_QueryInterface __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_QueryInterface
#define IStatusChangedEventArgs_AddRef __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_AddRef
#define IStatusChangedEventArgs_Release __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_Release
#define IStatusChangedEventArgs_GetIids __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_GetIids
#define IStatusChangedEventArgs_GetRuntimeClassName __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_GetRuntimeClassName
#define IStatusChangedEventArgs_GetTrustLevel __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_GetTrustLevel
#define IStatusChangedEventArgs_get_Status __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_get_Status
#endif /* WIDL_using_Windows_Devices_Geolocation */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * ICivicAddress interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress, 0xa8567a1a, 0x64f4, 0x4d48, 0xbc,0xea, 0xf6,0xb0,0x08,0xec,0xa3,0x4c);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Geolocation {
                MIDL_INTERFACE("a8567a1a-64f4-4d48-bcea-f6b008eca34c")
                ICivicAddress : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_Country(
                        HSTRING *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_State(
                        HSTRING *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_City(
                        HSTRING *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_PostalCode(
                        HSTRING *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Timestamp(
                        struct DateTime *value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress, 0xa8567a1a, 0x64f4, 0x4d48, 0xbc,0xea, 0xf6,0xb0,0x08,0xec,0xa3,0x4c)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddressVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress *This,
        TrustLevel *trustLevel);

    /*** ICivicAddress methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Country)(
        __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress *This,
        HSTRING *value);

    HRESULT (STDMETHODCALLTYPE *get_State)(
        __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress *This,
        HSTRING *value);

    HRESULT (STDMETHODCALLTYPE *get_City)(
        __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress *This,
        HSTRING *value);

    HRESULT (STDMETHODCALLTYPE *get_PostalCode)(
        __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress *This,
        HSTRING *value);

    HRESULT (STDMETHODCALLTYPE *get_Timestamp)(
        __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress *This,
        struct __x_ABI_CWindows_CFoundation_CDateTime *value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddressVtbl;

interface __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress {
    CONST_VTBL __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddressVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** ICivicAddress methods ***/
#define __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_get_Country(This,value) (This)->lpVtbl->get_Country(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_get_State(This,value) (This)->lpVtbl->get_State(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_get_City(This,value) (This)->lpVtbl->get_City(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_get_PostalCode(This,value) (This)->lpVtbl->get_PostalCode(This,value)
#define __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_get_Timestamp(This,value) (This)->lpVtbl->get_Timestamp(This,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_QueryInterface(__x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_AddRef(__x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_Release(__x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_GetIids(__x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_GetTrustLevel(__x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** ICivicAddress methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_get_Country(__x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress* This,HSTRING *value) {
    return This->lpVtbl->get_Country(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_get_State(__x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress* This,HSTRING *value) {
    return This->lpVtbl->get_State(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_get_City(__x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress* This,HSTRING *value) {
    return This->lpVtbl->get_City(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_get_PostalCode(__x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress* This,HSTRING *value) {
    return This->lpVtbl->get_PostalCode(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_get_Timestamp(__x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress* This,struct __x_ABI_CWindows_CFoundation_CDateTime *value) {
    return This->lpVtbl->get_Timestamp(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Geolocation
#define IID_ICivicAddress IID___x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress
#define ICivicAddressVtbl __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddressVtbl
#define ICivicAddress __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress
#define ICivicAddress_QueryInterface __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_QueryInterface
#define ICivicAddress_AddRef __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_AddRef
#define ICivicAddress_Release __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_Release
#define ICivicAddress_GetIids __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_GetIids
#define ICivicAddress_GetRuntimeClassName __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_GetRuntimeClassName
#define ICivicAddress_GetTrustLevel __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_GetTrustLevel
#define ICivicAddress_get_Country __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_get_Country
#define ICivicAddress_get_State __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_get_State
#define ICivicAddress_get_City __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_get_City
#define ICivicAddress_get_PostalCode __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_get_PostalCode
#define ICivicAddress_get_Timestamp __x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_get_Timestamp
#endif /* WIDL_using_Windows_Devices_Geolocation */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CGeolocation_CICivicAddress_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Geolocation.Geolocator
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Geolocation_Geolocator_DEFINED
#define RUNTIMECLASS_Windows_Devices_Geolocation_Geolocator_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Geolocation_Geolocator[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','G','e','o','l','o','c','a','t','i','o','n','.','G','e','o','l','o','c','a','t','o','r',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Geolocation_Geolocator[] = L"Windows.Devices.Geolocation.Geolocator";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Geolocation_Geolocator[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','G','e','o','l','o','c','a','t','i','o','n','.','G','e','o','l','o','c','a','t','o','r',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Geolocation_Geolocator_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Geolocation.Geoposition
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Geolocation_Geoposition_DEFINED
#define RUNTIMECLASS_Windows_Devices_Geolocation_Geoposition_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Geolocation_Geoposition[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','G','e','o','l','o','c','a','t','i','o','n','.','G','e','o','p','o','s','i','t','i','o','n',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Geolocation_Geoposition[] = L"Windows.Devices.Geolocation.Geoposition";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Geolocation_Geoposition[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','G','e','o','l','o','c','a','t','i','o','n','.','G','e','o','p','o','s','i','t','i','o','n',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Geolocation_Geoposition_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Geolocation.Geocoordinate
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Geolocation_Geocoordinate_DEFINED
#define RUNTIMECLASS_Windows_Devices_Geolocation_Geocoordinate_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Geolocation_Geocoordinate[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','G','e','o','l','o','c','a','t','i','o','n','.','G','e','o','c','o','o','r','d','i','n','a','t','e',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Geolocation_Geocoordinate[] = L"Windows.Devices.Geolocation.Geocoordinate";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Geolocation_Geocoordinate[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','G','e','o','l','o','c','a','t','i','o','n','.','G','e','o','c','o','o','r','d','i','n','a','t','e',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Geolocation_Geocoordinate_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Geolocation.PositionChangedEventArgs
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Geolocation_PositionChangedEventArgs_DEFINED
#define RUNTIMECLASS_Windows_Devices_Geolocation_PositionChangedEventArgs_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Geolocation_PositionChangedEventArgs[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','G','e','o','l','o','c','a','t','i','o','n','.','P','o','s','i','t','i','o','n','C','h','a','n','g','e','d','E','v','e','n','t','A','r','g','s',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Geolocation_PositionChangedEventArgs[] = L"Windows.Devices.Geolocation.PositionChangedEventArgs";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Geolocation_PositionChangedEventArgs[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','G','e','o','l','o','c','a','t','i','o','n','.','P','o','s','i','t','i','o','n','C','h','a','n','g','e','d','E','v','e','n','t','A','r','g','s',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Geolocation_PositionChangedEventArgs_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Geolocation.StatusChangedEventArgs
 */
#ifndef RUNTIMECLASS_Windows_Devices_Geolocation_StatusChangedEventArgs_DEFINED
#define RUNTIMECLASS_Windows_Devices_Geolocation_StatusChangedEventArgs_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Geolocation_StatusChangedEventArgs[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','G','e','o','l','o','c','a','t','i','o','n','.','S','t','a','t','u','s','C','h','a','n','g','e','d','E','v','e','n','t','A','r','g','s',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Geolocation_StatusChangedEventArgs[] = L"Windows.Devices.Geolocation.StatusChangedEventArgs";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Geolocation_StatusChangedEventArgs[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','G','e','o','l','o','c','a','t','i','o','n','.','S','t','a','t','u','s','C','h','a','n','g','e','d','E','v','e','n','t','A','r','g','s',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Geolocation_StatusChangedEventArgs_DEFINED */

/*
 * Class Windows.Devices.Geolocation.CivicAddress
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Geolocation_CivicAddress_DEFINED
#define RUNTIMECLASS_Windows_Devices_Geolocation_CivicAddress_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Geolocation_CivicAddress[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','G','e','o','l','o','c','a','t','i','o','n','.','C','i','v','i','c','A','d','d','r','e','s','s',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Geolocation_CivicAddress[] = L"Windows.Devices.Geolocation.CivicAddress";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Geolocation_CivicAddress[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','G','e','o','l','o','c','a','t','i','o','n','.','C','i','v','i','c','A','d','d','r','e','s','s',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Geolocation_CivicAddress_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IAsyncOperationCompletedHandler<ABI::Windows::Devices::Geolocation::Geoposition* > interface
 */
#ifndef ____FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_INTERFACE_DEFINED__
#define ____FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition, 0x7668a704, 0x244e, 0x5e12, 0x8d,0xcb, 0x92,0xa3,0x29,0x9e,0xba,0x26);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            template<>
            MIDL_INTERFACE("7668a704-244e-5e12-8dcb-92a3299eba26")
            IAsyncOperationCompletedHandler<ABI::Windows::Devices::Geolocation::Geoposition* > : IAsyncOperationCompletedHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Geolocation::Geoposition*, ABI::Windows::Devices::Geolocation::IGeoposition* > >
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition, 0x7668a704, 0x244e, 0x5e12, 0x8d,0xcb, 0x92,0xa3,0x29,0x9e,0xba,0x26)
#endif
#else
typedef struct __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeopositionVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition *This);

    /*** IAsyncOperationCompletedHandler<ABI::Windows::Devices::Geolocation::Geoposition* > methods ***/
    HRESULT (STDMETHODCALLTYPE *Invoke)(
        __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition *This,
        __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition *info,
        AsyncStatus status);

    END_INTERFACE
} __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeopositionVtbl;

interface __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition {
    CONST_VTBL __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeopositionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_Release(This) (This)->lpVtbl->Release(This)
/*** IAsyncOperationCompletedHandler<ABI::Windows::Devices::Geolocation::Geoposition* > methods ***/
#define __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_Invoke(This,info,status) (This)->lpVtbl->Invoke(This,info,status)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_QueryInterface(__FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_AddRef(__FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_Release(__FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition* This) {
    return This->lpVtbl->Release(This);
}
/*** IAsyncOperationCompletedHandler<ABI::Windows::Devices::Geolocation::Geoposition* > methods ***/
static __WIDL_INLINE HRESULT __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_Invoke(__FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition* This,__FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition *info,AsyncStatus status) {
    return This->lpVtbl->Invoke(This,info,status);
}
#endif
#ifdef WIDL_using_Windows_Foundation
#define IID_IAsyncOperationCompletedHandler_Geoposition IID___FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition
#define IAsyncOperationCompletedHandler_GeopositionVtbl __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeopositionVtbl
#define IAsyncOperationCompletedHandler_Geoposition __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition
#define IAsyncOperationCompletedHandler_Geoposition_QueryInterface __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_QueryInterface
#define IAsyncOperationCompletedHandler_Geoposition_AddRef __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_AddRef
#define IAsyncOperationCompletedHandler_Geoposition_Release __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_Release
#define IAsyncOperationCompletedHandler_Geoposition_Invoke __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_Invoke
#endif /* WIDL_using_Windows_Foundation */
#endif

#endif

#endif  /* ____FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAsyncOperation<ABI::Windows::Devices::Geolocation::Geoposition* > interface
 */
#ifndef ____FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_INTERFACE_DEFINED__
#define ____FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition, 0xee73ecf0, 0x099d, 0x57e5, 0x84,0x07, 0x5b,0x32,0xe5,0xaf,0x1c,0xc4);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            template<>
            MIDL_INTERFACE("ee73ecf0-099d-57e5-8407-5b32e5af1cc4")
            IAsyncOperation<ABI::Windows::Devices::Geolocation::Geoposition* > : IAsyncOperation_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Geolocation::Geoposition*, ABI::Windows::Devices::Geolocation::IGeoposition* > >
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition, 0xee73ecf0, 0x099d, 0x57e5, 0x84,0x07, 0x5b,0x32,0xe5,0xaf,0x1c,0xc4)
#endif
#else
typedef struct __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeopositionVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition *This,
        TrustLevel *trustLevel);

    /*** IAsyncOperation<ABI::Windows::Devices::Geolocation::Geoposition* > methods ***/
    HRESULT (STDMETHODCALLTYPE *put_Completed)(
        __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition *This,
        __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition *handler);

    HRESULT (STDMETHODCALLTYPE *get_Completed)(
        __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition *This,
        __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition **handler);

    HRESULT (STDMETHODCALLTYPE *GetResults)(
        __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition *This,
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition **results);

    END_INTERFACE
} __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeopositionVtbl;

interface __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition {
    CONST_VTBL __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeopositionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IAsyncOperation<ABI::Windows::Devices::Geolocation::Geoposition* > methods ***/
#define __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_put_Completed(This,handler) (This)->lpVtbl->put_Completed(This,handler)
#define __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_get_Completed(This,handler) (This)->lpVtbl->get_Completed(This,handler)
#define __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_GetResults(This,results) (This)->lpVtbl->GetResults(This,results)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_QueryInterface(__FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_AddRef(__FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_Release(__FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_GetIids(__FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_GetRuntimeClassName(__FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_GetTrustLevel(__FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IAsyncOperation<ABI::Windows::Devices::Geolocation::Geoposition* > methods ***/
static __WIDL_INLINE HRESULT __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_put_Completed(__FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition* This,__FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition *handler) {
    return This->lpVtbl->put_Completed(This,handler);
}
static __WIDL_INLINE HRESULT __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_get_Completed(__FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition* This,__FIAsyncOperationCompletedHandler_1_Windows__CDevices__CGeolocation__CGeoposition **handler) {
    return This->lpVtbl->get_Completed(This,handler);
}
static __WIDL_INLINE HRESULT __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_GetResults(__FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition* This,__x_ABI_CWindows_CDevices_CGeolocation_CIGeoposition **results) {
    return This->lpVtbl->GetResults(This,results);
}
#endif
#ifdef WIDL_using_Windows_Foundation
#define IID_IAsyncOperation_Geoposition IID___FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition
#define IAsyncOperation_GeopositionVtbl __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeopositionVtbl
#define IAsyncOperation_Geoposition __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition
#define IAsyncOperation_Geoposition_QueryInterface __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_QueryInterface
#define IAsyncOperation_Geoposition_AddRef __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_AddRef
#define IAsyncOperation_Geoposition_Release __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_Release
#define IAsyncOperation_Geoposition_GetIids __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_GetIids
#define IAsyncOperation_Geoposition_GetRuntimeClassName __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_GetRuntimeClassName
#define IAsyncOperation_Geoposition_GetTrustLevel __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_GetTrustLevel
#define IAsyncOperation_Geoposition_put_Completed __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_put_Completed
#define IAsyncOperation_Geoposition_get_Completed __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_get_Completed
#define IAsyncOperation_Geoposition_GetResults __FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_GetResults
#endif /* WIDL_using_Windows_Foundation */
#endif

#endif

#endif  /* ____FIAsyncOperation_1_Windows__CDevices__CGeolocation__CGeoposition_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ITypedEventHandler<ABI::Windows::Devices::Geolocation::Geolocator*,ABI::Windows::Devices::Geolocation::PositionChangedEventArgs* > interface
 */
#ifndef ____FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_INTERFACE_DEFINED__
#define ____FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_INTERFACE_DEFINED__

DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs, 0xdf3c6164, 0x4e7b, 0x5e8e, 0x9a,0x7e, 0x13,0xda,0x05,0x9d,0xec,0x1e);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            template<>
            MIDL_INTERFACE("df3c6164-4e7b-5e8e-9a7e-13da059dec1e")
            ITypedEventHandler<ABI::Windows::Devices::Geolocation::Geolocator*,ABI::Windows::Devices::Geolocation::PositionChangedEventArgs* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Geolocation::Geolocator*, ABI::Windows::Devices::Geolocation::IGeolocator* >, ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Geolocation::PositionChangedEventArgs*, ABI::Windows::Devices::Geolocation::IPositionChangedEventArgs* > >
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs, 0xdf3c6164, 0x4e7b, 0x5e8e, 0x9a,0x7e, 0x13,0xda,0x05,0x9d,0xec,0x1e)
#endif
#else
typedef struct __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs *This);

    /*** ITypedEventHandler<ABI::Windows::Devices::Geolocation::Geolocator*,ABI::Windows::Devices::Geolocation::PositionChangedEventArgs* > methods ***/
    HRESULT (STDMETHODCALLTYPE *Invoke)(
        __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs *This,
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *sender,
        __x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs *args);

    END_INTERFACE
} __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgsVtbl;

interface __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs {
    CONST_VTBL __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_Release(This) (This)->lpVtbl->Release(This)
/*** ITypedEventHandler<ABI::Windows::Devices::Geolocation::Geolocator*,ABI::Windows::Devices::Geolocation::PositionChangedEventArgs* > methods ***/
#define __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_QueryInterface(__FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_AddRef(__FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_Release(__FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs* This) {
    return This->lpVtbl->Release(This);
}
/*** ITypedEventHandler<ABI::Windows::Devices::Geolocation::Geolocator*,ABI::Windows::Devices::Geolocation::PositionChangedEventArgs* > methods ***/
static __WIDL_INLINE HRESULT __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_Invoke(__FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs* This,__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *sender,__x_ABI_CWindows_CDevices_CGeolocation_CIPositionChangedEventArgs *args) {
    return This->lpVtbl->Invoke(This,sender,args);
}
#endif
#ifdef WIDL_using_Windows_Foundation
#define IID_ITypedEventHandler_Geolocator_PositionChangedEventArgs IID___FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs
#define ITypedEventHandler_Geolocator_PositionChangedEventArgsVtbl __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgsVtbl
#define ITypedEventHandler_Geolocator_PositionChangedEventArgs __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs
#define ITypedEventHandler_Geolocator_PositionChangedEventArgs_QueryInterface __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_QueryInterface
#define ITypedEventHandler_Geolocator_PositionChangedEventArgs_AddRef __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_AddRef
#define ITypedEventHandler_Geolocator_PositionChangedEventArgs_Release __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_Release
#define ITypedEventHandler_Geolocator_PositionChangedEventArgs_Invoke __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_Invoke
#endif /* WIDL_using_Windows_Foundation */
#endif

#endif

#endif  /* ____FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CPositionChangedEventArgs_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ITypedEventHandler<ABI::Windows::Devices::Geolocation::Geolocator*,ABI::Windows::Devices::Geolocation::StatusChangedEventArgs* > interface
 */
#ifndef ____FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_INTERFACE_DEFINED__
#define ____FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_INTERFACE_DEFINED__

DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs, 0x97fcf582, 0xde6b, 0x5cd3, 0x96,0x90, 0xe2,0xec,0xbb,0x66,0xda,0x4d);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            template<>
            MIDL_INTERFACE("97fcf582-de6b-5cd3-9690-e2ecbb66da4d")
            ITypedEventHandler<ABI::Windows::Devices::Geolocation::Geolocator*,ABI::Windows::Devices::Geolocation::StatusChangedEventArgs* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Geolocation::Geolocator*, ABI::Windows::Devices::Geolocation::IGeolocator* >, ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Geolocation::StatusChangedEventArgs*, ABI::Windows::Devices::Geolocation::IStatusChangedEventArgs* > >
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs, 0x97fcf582, 0xde6b, 0x5cd3, 0x96,0x90, 0xe2,0xec,0xbb,0x66,0xda,0x4d)
#endif
#else
typedef struct __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs *This);

    /*** ITypedEventHandler<ABI::Windows::Devices::Geolocation::Geolocator*,ABI::Windows::Devices::Geolocation::StatusChangedEventArgs* > methods ***/
    HRESULT (STDMETHODCALLTYPE *Invoke)(
        __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs *This,
        __x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *sender,
        __x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs *args);

    END_INTERFACE
} __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgsVtbl;

interface __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs {
    CONST_VTBL __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_Release(This) (This)->lpVtbl->Release(This)
/*** ITypedEventHandler<ABI::Windows::Devices::Geolocation::Geolocator*,ABI::Windows::Devices::Geolocation::StatusChangedEventArgs* > methods ***/
#define __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_QueryInterface(__FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_AddRef(__FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_Release(__FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs* This) {
    return This->lpVtbl->Release(This);
}
/*** ITypedEventHandler<ABI::Windows::Devices::Geolocation::Geolocator*,ABI::Windows::Devices::Geolocation::StatusChangedEventArgs* > methods ***/
static __WIDL_INLINE HRESULT __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_Invoke(__FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs* This,__x_ABI_CWindows_CDevices_CGeolocation_CIGeolocator *sender,__x_ABI_CWindows_CDevices_CGeolocation_CIStatusChangedEventArgs *args) {
    return This->lpVtbl->Invoke(This,sender,args);
}
#endif
#ifdef WIDL_using_Windows_Foundation
#define IID_ITypedEventHandler_Geolocator_StatusChangedEventArgs IID___FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs
#define ITypedEventHandler_Geolocator_StatusChangedEventArgsVtbl __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgsVtbl
#define ITypedEventHandler_Geolocator_StatusChangedEventArgs __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs
#define ITypedEventHandler_Geolocator_StatusChangedEventArgs_QueryInterface __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_QueryInterface
#define ITypedEventHandler_Geolocator_StatusChangedEventArgs_AddRef __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_AddRef
#define ITypedEventHandler_Geolocator_StatusChangedEventArgs_Release __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_Release
#define ITypedEventHandler_Geolocator_StatusChangedEventArgs_Invoke __FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_Invoke
#endif /* WIDL_using_Windows_Foundation */
#endif

#endif

#endif  /* ____FITypedEventHandler_2_Windows__CDevices__CGeolocation__CGeolocator_Windows__CDevices__CGeolocation__CStatusChangedEventArgs_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */

ULONG           __RPC_USER HSTRING_UserSize     (ULONG *, ULONG, HSTRING *);
unsigned char * __RPC_USER HSTRING_UserMarshal  (ULONG *, unsigned char *, HSTRING *);
unsigned char * __RPC_USER HSTRING_UserUnmarshal(ULONG *, unsigned char *, HSTRING *);
void            __RPC_USER HSTRING_UserFree     (ULONG *, HSTRING *);

/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __windows_devices_geolocation_h__ */
