IDefaultLocation
COM公式ドキュメント
IDefaultLocation は、既定の位置(ロケーション)を指定または取得するためのメソッドを提供します。
解説(Remarks)
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
既定の位置を設定します。
| reportType | GUID* | in | pLocationReport を使用して渡されるレポートの種類のインターフェース ID を表す REFIID。 |
| pLocationReport | ILocationReport* | inoptional | 既定の位置プロバイダーからの位置レポートを格納する ILocationReport インスタンスへのポインター。 |
戻り値
取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| 位置レポートが正常に設定されました。 | |
| 位置レポートに無効なデータが含まれています。これは、市街地住所レポートに有効な ISO 3166 の 2 文字の国または地域コードが含まれていない場合、または緯度/経度レポートに -90 から 90 の範囲の緯度が含まれていない場合や -180 から 180 の範囲の経度が含まれていない場合に発生することがあります。 | |
| ユーザーに既定の位置を設定するアクセス許可がありません。 |
解説(Remarks)
ILocationReport は、特定の位置レポートの種類の基底インターフェースです。pLocationReport に使用する実際のインターフェースは、reportType で指定する種類と一致している必要があります。
reportType で指定する種類は、ICivicAddressReport または ILatLongReport のいずれかの IID でなければならない点に注意してください。
緯度/経度レポートで指定する緯度と経度は、地球上の位置に対応している必要があります。そうでない場合、このメソッドは HRESULT のエラー値を返します。
例
次の例は、市街地住所レポートを使用して既定の位置を設定する方法を示します。
// 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");
}
既定の位置プロバイダーから、指定したレポートの種類を取得します。
| reportType | GUID* | in | 取得するレポートの種類のインターフェース ID を表す REFIID。 |
| ppLocationReport | ILocationReport** | out | 既定の位置プロバイダーから指定した位置レポートを受け取る、ILocationReport へのポインターのアドレス。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| リターンコード | 説明 |
|---|---|
| 位置レポートが正常に取得されました。 | |
| reportType が IID_ILatLongReport または IID_ICivicAddressReport 以外です。 | |
|
利用可能なデータがありません。これは、レジストリに既定の位置データがない、レジストリのデータが破損している、または既定の位置レポートに国/地域フィールドがないことが原因である可能性があります。 |
| ppLocationReport が NULL です。 |
解説(Remarks)
ILocationReport は、特定の位置レポートの種類の基底インターフェースです。ppLocationReport に使用する実際のインターフェースは、reportType で指定した種類と一致している必要があります。
IDefaultLocation::GetReport の呼び出しがアプリケーションによる位置情報の初回使用である場合、タスクバーに通知が表示され、イベントビューアーに位置情報アクティビティのイベントが記録されることがあります。
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 指定が可能。#define global IID_IDefaultLocation "{A65AF77E-969A-4A2E-8ACA-33BB7CBB1235}" #usecom global IDefaultLocation IID_IDefaultLocation "{8B7FBFE0-5CD7-494A-AF8C-283A65707506}" #comfunc global IDefaultLocation_SetReport 3 sptr,sptr #comfunc global IDefaultLocation_GetReport 4 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。