locked
C++/CX 获取GPS位置信息的时候异常 RRS feed

  • 问题

  • CX/C++ Windows Phones 可以获取地理位置信息吗?我写了段代码,但是获取的时候总是异常

    Geolocator^ locObj = ref new Geolocator;
    	auto taskGetLoc = locObj->GetGeopositionAsync();
    	taskGetLoc->Completed = ref new AsyncOperationCompletedHandler<Geoposition^>(this, &Test::MainPage::getGPSLocationComplete);
    
    void Test::MainPage::getGPSLocationComplete(Windows::Foundation::IAsyncOperation<Windows::Devices::Geolocation::Geoposition^>^ loc, Windows::Foundation::AsyncStatus status) {
    
    	if (status == Windows::Foundation::AsyncStatus::Completed) {
    
    		try
    		{
    			auto lat = loc->GetResults()->Coordinate->Point->Position.Latitude;
    			auto lon = loc->GetResults()->Coordinate->Point->Position.Longitude;
    
    			String^ locStr = ref new String;
    			locStr += "Lat: ";
    			locStr += lat;
    			locStr += "Lon: ";
    			locStr += lon;
    
    			OutputDebugString(locStr->Data());
    		}
    		catch (const std::exception& e)
    		{
    			int cbSize = strlen(e.what())+1;
    			std::wstring wstrWhat;
    			mbstowcs(&wstrWhat[0], e.what(), cbSize);
    		}
    	}
    	else if (status == Windows::Foundation::AsyncStatus::Error) {
    		OutputDebugString(L"There are a error in get GPS Location information\n");
    	}
    }

    

    有人知道为什么吗?

    2016年3月4日 3:09

答案

  • 问题解决了,原因是系统提起调用了设置在complete中的方法,修改方法是用task改写,然后再then中绑定任务完成的时候的处理方法
    • 已标记为答案 eXIA_C 2016年3月7日 7:35
    2016年3月7日 7:35

全部回复

  • 其实我也是最近才接触CX/C++,因为有两个核心的算法是使用C++写的,本身也是用C++比较多,也知道那个是空指针,但是还是没有找到哪些出问题了
    2016年3月4日 14:40
  • 我觉得很奇怪的是,我只是首先用GetGeopositionAsync异步获取,然后绑定一个异步操作完成后的处理方法,但是在这个方法里面只要调用参数geoposition就会异常,我觉得这个参数应该是空指针,但是这个传入的参数,所以不应该是空指针的,而且既然定义ref new的话,这个对象应该由系统管理,引用次数不为0的时候就不应该释放,所以很不解....
    2016年3月5日 12:58
  • 问题解决了,原因是系统提起调用了设置在complete中的方法,修改方法是用task改写,然后再then中绑定任务完成的时候的处理方法
    • 已标记为答案 eXIA_C 2016年3月7日 7:35
    2016年3月7日 7:35