Win32 API 日本語リファレンス
ホームDevices.Geolocation › IDefaultLocation

IDefaultLocation

COM
IIDa65af77e-969a-4a2e-8aca-33bb7cbb1235継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IDefaultLocation は、既定の位置(ロケーション)を指定または取得するためのメソッドを提供します。

解説(Remarks)

次の両方の条件が真である場合、アプリケーションは OnLocationChanged から想定される位置変更イベントを受け取りません。第 1 に、アプリケーションが LOCALSERVICE、SYSTEM、または NETWORKSERVICE ユーザーアカウントのコンテキストでサービスとして実行されている場合。第 2 に、位置変更イベントが既定の位置の変更に起因する場合(ユーザーがコントロールパネルで 既定の位置 を選択して手動で変更した場合、またはアプリケーションが IDefaultLocation::SetReport を呼び出してプログラムで変更した場合)。

メソッド 2

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT SetReport(GUID* reportType, ILocationReport* pLocationReport)

既定の位置を設定します。

reportTypeGUID*inpLocationReport を使用して渡されるレポートの種類のインターフェース ID を表す REFIID
pLocationReportILocationReport*inoptional既定の位置プロバイダーからの位置レポートを格納する ILocationReport インスタンスへのポインター。

戻り値

取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
位置レポートが正常に設定されました。
E_INVALIDARG
位置レポートに無効なデータが含まれています。これは、市街地住所レポートに有効な ISO 3166 の 2 文字の国または地域コードが含まれていない場合、または緯度/経度レポートに -90 から 90 の範囲の緯度が含まれていない場合や -180 から 180 の範囲の経度が含まれていない場合に発生することがあります。
E_ACCESSDENIED
ユーザーに既定の位置を設定するアクセス許可がありません。

解説(Remarks)

ILocationReport は、特定の位置レポートの種類の基底インターフェースです。pLocationReport に使用する実際のインターフェースは、reportType で指定する種類と一致している必要があります。

reportType で指定する種類は、ICivicAddressReport または ILatLongReport のいずれかの IID でなければならない点に注意してください。

緯度/経度レポートで指定する緯度と経度は、地球上の位置に対応している必要があります。そうでない場合、このメソッドは HRESULT のエラー値を返します。

次の両方の条件が真である場合、アプリケーションは OnLocationChanged から想定される位置変更イベントを受け取りません。第 1 に、アプリケーションが LOCALSERVICE、SYSTEM、または NETWORKSERVICE ユーザーアカウントのコンテキストでサービスとして実行されている場合。第 2 に、位置変更イベントが既定の位置の変更に起因する場合(ユーザーがコントロールパネルで 既定の位置 を選択して手動で変更した場合、またはアプリケーションが IDefaultLocation::SetReport を呼び出してプログラムで変更した場合)。

次の例は、市街地住所レポートを使用して既定の位置を設定する方法を示します。

            // set the civic address fields of the Default Location
            hr = spDefaultLocation->SetReport(IID_ICivicAddressReport, spCivicAddressReport);
            if (E_INVALIDARG == hr)
            {
                wprintf(L"The civic address report has invalid data. ");
                wprintf(L"Country/region must be a valid ISO-3166 2-letter or 3-letter code.\n");
            }
            else if (E_ACCESSDENIED == hr)
            {
                wprintf(L"Administrator privilege required.\n");
            }
vtbl 4 HRESULT GetReport(GUID* reportType, ILocationReport** ppLocationReport)

既定の位置プロバイダーから、指定したレポートの種類を取得します。

reportTypeGUID*in取得するレポートの種類のインターフェース ID を表す REFIID
ppLocationReportILocationReport**out既定の位置プロバイダーから指定した位置レポートを受け取る、ILocationReport へのポインターのアドレス。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

リターンコード 説明
S_OK
位置レポートが正常に取得されました。
E_INVALIDARG
reportType IID_ILatLongReport または IID_ICivicAddressReport 以外です。
HRESULT_FROM_WIN32(ERROR_NO_DATA)
利用可能なデータがありません。これは、レジストリに既定の位置データがない、レジストリのデータが破損している、または既定の位置レポートに国/地域フィールドがないことが原因である可能性があります。
E_POINTER
ppLocationReportNULL です。

解説(Remarks)

ILocationReport は、特定の位置レポートの種類の基底インターフェースです。ppLocationReport に使用する実際のインターフェースは、reportType で指定した種類と一致している必要があります。

IDefaultLocation::GetReport の呼び出しがアプリケーションによる位置情報の初回使用である場合、タスクバーに通知が表示され、イベントビューアーに位置情報アクティビティのイベントが記録されることがあります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IDefaultLocation "{A65AF77E-969A-4A2E-8ACA-33BB7CBB1235}"
#usecom global IDefaultLocation IID_IDefaultLocation "{8B7FBFE0-5CD7-494A-AF8C-283A65707506}"
#comfunc global IDefaultLocation_SetReport  3 var,sptr
#comfunc global IDefaultLocation_GetReport  4 var,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。