我正在寻找一种如何从WM6手机中检索GPS数据的非常简单的解决方案。我不是在寻找一个GPS包装库(Google似乎只能找到GPS库...)。我只是欣赏一段完全符合这一要求的代码:启动gps,检索long和lat,结束gps。而已。我想使用.NET Compact Framework我需要使用P / Invoke 有任何想法吗?感谢很多。
答案 0 :(得分:1)
您说您不是在寻找GPS Wrapper库,但是您想要查询GPS。最简单的方法是使用GPS中间库,它是一个流接口驱动程序。从托管代码调用它需要某种形式的包装器来进行P / Invoke调用。无论你是写那个还是你使用已经存在的那个都取决于你,但无论如何你都会使用包装器。
要简单地打开GPS,获取一个位置并关闭它将是一组三个电话:GpsOpenDevice,GpsGetPosition和GpsCloseDevice,但是在调用GpsOpenDevice之后你真的需要要知道在调用GpsGetPosition之前何时初始化了驱动程序,所以你可能还需要调用GpsGetDeviceState来知道它什么时候准备就绪。
由于您不需要通知,因此对GpsOpenDevice的调用很简单 - 只需为所有参数传入零(或IntPtr.Zero,具体取决于您如何定义P / Invoke方法)。
GpsGetPosition采用指向GPS_POSITION结构的指针。这是一个丑陋的野兽,但不是太糟糕,因为它没有任何指针可以分配,而CF Marshaler,在一点帮助下,可以很容易地编组它。
我不打算在这里编写代码,因为它很冗长,而且已经在微软提供的带有WinMo SDK的GPS示例应用程序中完成了(在%PROGRAM FILES%\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS
看你的硬盘上)。