程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 介紹一個簡單的GPS應用軟件開發包

介紹一個簡單的GPS應用軟件開發包

編輯:關於VC++

簡介:

歡迎使用 GPSLIB,這是一個簡單的軟件開發包(SDK),你可以利用這個 GPSLIB 在自己的32位 Windows 應用程序中加入全球定位系統的支持。

本文附帶的源代碼壓縮文件中包含有 GPSLIB 庫的源代碼和 Demo 程序。很多文件中都有詳細的注釋說明。為了保證可下載文件的體積盡量的小,壓縮文件中不含任何二進制文件。請使用Visual C++ 5 以上的版本編譯並生成 DLLs、控制面板程序和可執行文件。

特性:

可以在任何支持Windows DLLs調用的開發環境中使用,包括VB、VBA、C、C++、Fortran、Delphi。

完全支持 UNICODE 編碼字符集。

提供一個控制面板程序用以在客戶端添加、配置和刪除GPS接收器。

簡單易用的API函數調用與 Win32 SDK API 調用方法類似,所以 Windows 程序開發人員對此不會感到陌生。

提供全部的源代碼,以便幫助開發人員在調試時可進入 GPSLIB 庫代碼。

安裝與配置:

GPSLIB 只能用於 Win32 平台。它沒有安裝程序。只要將 gpslib.zip 文件解壓縮到硬盤上的某個目錄即可。

當你分發自己的應用程序時,必須將相關的 GPSLIB.DLL 文件以及控制面板程序一起分發。

注意事項:

請隨時跟蹤作者個人網站,以便獲得最新版本。

使用方法:

用 GPSLIB 開發客戶端程序時,請鏈接相應的 GPSLIB DLL 文件(靜態鏈接或動態鏈接均可),然後調用其中輸出的函數。

使用 GPSLIB 之前,必須修改包含文件路徑和庫文件路經,使其指向 GPSLIB 所在的目錄。

如果想重新生成 GPSLIB 組件,請直接打開 gps32.dsw 工程文件。然後重新編譯生成。

GPSLIB 組件中不包含二進制模塊,需要時請用相應的*.dsw文件重新生成。

不同的生成配置必須鏈接不同版本的 GPSLIB DLL。具體細節請參考表一。

控制面板由兩個文件組成。一個是.CPL文件,另一個是.EXE文件。生成配置請參考表二。

形成 GPS 控制面板的兩個程序應該被安裝到客戶端機器的系統目錄( 如Windows NT 或 Windows 2000的 system32 )。但 GPSLIB DLL 既可以被安裝到客戶端機器的系統目錄,也可以被安裝到客戶端機器的應用程序目錄。

請注意分發程序時,任何人只被允許分發 GPSLIB 的正式(RELEASE)版本。

調試(Debug)版本只用於調試。開發客戶端程序的語言或工具最好能支持 DLLs 中的調試信息,以便在 MS IDE 開發環境中調試使用 GPSLIB 庫的客戶端程序時能直接跟蹤到 GPSLIB 庫的源代碼。

表一:

生成配置

需要鏈接的GPSLIB DLL

Ascii Debug GPS103D.DLL Ascii Release GPS103.DLL Unicode Debug GPS103UD.DLL Unicode Release GPS103U.DLL

表二:

生成配置

控制面板動態庫

控制面板執行文件

Ascii Debug GPS103D.CPL GPS103D.EXE Ascii Release GPS103.CPL GPS103.EXE Unicode Debug GPS103UD.CPL GPS103UD.EXE Unicode Release GPS103U.CPL GPS103U.EXE

API 參考:

GPSLIB DLLs 接口函數輸出清單如下:

GpsShowControlPanel

GpsCreateEntry

GpsGetNumDevices

GpsEnumDevices

GpsDeleteEntry

GpsRenameEntry

GpsPropertiesDlg

GpsOpen

GpsClose

GpsGetPosition

GpsGetVersion

GpsDeviceNameAlreadyExists

GpsShowAboutBox

GpsGetDevice

GpsSetDevice

GpsShowControlPanel

BOOL GpsShowControlPanel();

返回值

如果控制面板程序顯示成功,函數返回 TRUE,否則返回 FALSE。

參數

注釋

調用此函數打開 GPS 接收器控制面板程序。通過該程序可以在系統中安裝、配置和刪除 GPS 接收器。

GpsCreateEntry

BOOL GpsCreateEntry(HWND hWnd);

返回值

如果安裝新的 GPS 接收器成功,函數返回 TRUE,否則返回 FALSE。

參數

hWnd 用於此函數顯示的用戶界面元素父窗口句柄。

注釋

調用此函數將顯示一個基於向導的標准對話框,使用戶可以在其計算機上安裝 GPS 接收器。

參見

GpsDeleteEntry, GpsGetDevice

GpsGetNumDevices

DWORD GpsGetNumDevices();

返回值

當前安裝的 GPS 接收器數目。

參數

注釋

調用此函數可以返回當前安裝的 GPS 接收器數目。

參見

GpsEnumDevices, GpsGetDevice

GpsEnumDevices

DWORD GpsEnumDevices(LPGPSDEVINFO lpGpsDevInfo, DWORD dwRequestedDevices);

返回值

成功枚舉的 GPS 設備數目。

參數

IpGpsDevInfo 指向 GPSDEVINFO 結構的指針,該結構由函數體中的代碼填寫。

dwRequestedDevices 枚舉的設備數。

注釋

用此函數獲取任何已安裝 GPS 設備的配置參數。為了枚舉當前所有 GPS 設備,必須將 dwRequestedDevices 設置為 GpsGetNumDevices 的返回值。

參見

GpsGetNumDevices, GPSDEVINFO, GpsGetDevice

GpsDeleteEntry

BOOL GpsDeleteEntry(LPCTSTR lpszEntry);

返回值

如果成功刪除 GPS 設備,則為 TRUE,否則為 FALSE。

參數

lpszEntry 要刪除的 GPS 設備名。

注釋

刪除一個已安裝的 GPS 設備。

參見

GpsCreateEntry

GpsRenameEntry

BOOL GpsRenameEntry(LPCTSTR lpszOldEntry, LPCTSTR lpszNewEntry);

返回值

如果針對 GPS 設備的改名成功,則為 TRUE,否則為 FALSE。

參數

lpszOldEntry 當前的 GPS 設備名。

lpszNewEntry GPS 設備新名稱。

注釋

改名已安裝的 GPS 接收器。

參見

GpsCreateEntry, GpsDeleteEntry

GpsPropertiesDlg

BOOL GpsPropertiesDlg(HWND hWnd, LPCTSTR lpszEntry);

返回值

如果屬性對話框成功顯示並且用戶通過“OK”按鈕關閉對話框。則返回 TRUE。

參數

hWnd 用於顯示屬性對話框的父窗口。

lpszEntry 顯示該名稱的 GPS 設備屬性。

注釋

顯示與已安裝的 GPS 接收器關聯的屬性對話框。如果用“OK”按鈕關閉該對話框,則會保存對相關屬性數據的更新。

參見

GpsCreateEntry, GpsDeleteEntry

GpsOpen

HGPS GpsOpen(LPCTSTR lpszEntry);

返回值

返回抽象的 HANDLE 類型(HGPS),該 HANDLE 表示一個到 GPS 接收器的連接。如果是一個無效的 HANDLE ,則由標准的 Win32 INVALID_HANDLE_VALUE 值表示。

參數

lpszEntry 打開連接的 GPS 設備名稱。如果 lpszEntry 為 NULL。那麼默認的 GPS 接收器將被打開。

注釋

這是客戶端程序用來獲取 GPS 裝置的主要函數。客戶端程序還應該通過調用 GpsShowControlPanel 來提供打開控制面板的機制。

參見

GpsClose, GpsEnumDevices, GpsShowControlPanel

GpsClose

BOOL GpsClose(HGPS hEntry);

返回值

如果打開 GPS 接收器連接被成功關閉。則返回 TRUE。

參數

hEntry 要關閉的 GPS 接收器句柄。

注釋

此函數通常只在客戶端 GPS 程序退出之前被調用。

參見

GpsOpen

GpsGetPosition

BOOL GpsGetPosition(HGPS hEntry, LPGPSPOSITION lpPosition);

返回值

如果打開連接的 GPS 裝置被成功搜索到則返回 TRUE。

參數

hEntry 要搜索的 GPS 裝置的 GPS 連接句柄。

Remarks

在成功調用 GpsOpen 函數之後,客戶端程序應周期性地調用該函數,根據客戶端程序的需要,建議調用間隔在 1-5 秒,如果返回成功,那麼客戶端程序可將 lpPosition 用於任何目的,如:在某個地圖程序中,用此信息標出用戶位置,也可以在屏幕地圖上進行目標跟蹤。

參見

GpsOpen, GpsClose, GPSPOSITION

GpsGetVersion

DWORD GpsGetVersion();

返回值

當前 GPSLIB 庫的版本號,版本號值類型為 DWORD。

參數

注釋

返回 GPSLIB dll 版本號。當前的值為 0x101,其對應的 GPSLIB 版本號為 v1.01。

GpsDeviceNameAlreadyExists

BOOL GpsDeviceNameAlreadyExists(LPCTSTR lpszEntry);

返回值

如果命名的 GPS 設備已經被安裝,則返回 TRUE,否則返回 FALSE。

參數

lpszEntry GPS 設備名。該函數檢查該設備是否安裝。

注釋

在函數內部,使用 GpsEnumDevices 確定命名的 GPS 設備是否已經安裝。該函數被控制面板使用,以保證指定設備的唯一性。

參見

GpsEnumDevices

GpsShowAboutBox

void GpsShowAboutBox(HWND hWnd);

返回值

參數

hWnd 用於顯示關於對話框的父窗口句柄。

注釋

該函數顯示一個“關於”對話框,其中包含 GPSLIB 的版本號以及版權信息。它被用於控制面板自己的“關於”對話框。

參見

GpsGetVersion

GpsGetDevice

BOOL GpsGetDevice(LPCTSTR lpszEntry, LPGPSDEVINFO lpDevice);

返回值

如果成功找到該設備則返回 TRUE,否則返回 FALSE。

參數

lpszEntry 要對之進行設置的 GPS 設備名。

IpGpsDevInfo GPSDEVINFO 結構指針,該函數填寫該結構,然後以參數形式返回該結構。

注釋

獲取給定名稱的 GPS 設備的設置信息。如果 lpszEntry 被置為 NULL,那麼獲取的就是默認的 GPS 接收器設置。

參見

GpsSetDevice, GpsEnumDevices, GPSDEVINFO

GpsSetDevice

BOOL GpsSetDevice(LPCTSTR lpszEntry, LPCGPSDEVINFO lpGpsDevInfo);

返回值

如果成功更新設備的設置,則返回 TRUE,否則返回 FALSE。

參數

lpszEntry 要更新設置的 GPS 設備名。

IpGpsDevInfo GPSDEVINFO 常量結構指針,其中包含要更新的參數信息。

注釋

更新指定名稱的 GPS 設備設置。在調用該函數前,通常應該調用 GpsGetDevice 函數以保證 lpGpsDevInfo 包含有效成員。

參見

GpsGetDevice, GpsEnumDevices, GPSDEVINFO

GPSLIB 使用的數據結構:

GPSDEVINFO Structure
typedef struct tagGPSDEVINFO
{
TCHAR szDeviceName[ GPS_MaxDeviceName + 1 ];
BOOL bDefaultReceiver;
WORD wCommPort;
DWORD dwCommBaudRate;
WORD wCommDataBits;
WORD wCommParity;
WORD wCommStopBits;
} GPSDEVINFO;

GPSDEVINFO 結構用於表示 GPS 接收器設備屬性。

成員表:

szDeviceName GPS 設備名 bDefaultReceiver 如果該設備為默認接收器,該值為 TRUE,否則為 FALSE wCommPort GPS 接收器所連接的串行通訊口端口號 dwCommBaudRate 用於連接該設備的波特率 wCommDataBits 用與連接該設備通訊端口的數據位 wCommParity 用於連接該設備的枚舉類型校驗位。此成員取值為下列值之一:

GpsParityNone

GpsParityOdd

GpsParityEven

GpsParityMark

GpsParitySpace

wCommStopBits 用與連接該設備的枚舉類型停止位。此成員取值為下列值之一:

GpsStopBits1

GpsStopBits1Point5

GpsStopBits2

參見

GpsEnumDevices
GPSPOSITION Structure
typedef struct tagGPSPOSITION
{
BOOL bNorthing;
DWORD dwLatitude;
BOOL bEasting;
DWORD dwLongitude;
DWORD dwBearing;
DWORD dwSpeed;
WORD wFixYear;
WORD wFixMonth;
WORD wFixDay;
WORD wFixHour;
WORD wFixMinute;
WORD wFixSecond;
WORD nSatellites;
DWORD dwAntennaAltitude;
WORD wQualityIndicator;
} GPSPOSITION;

成員表:

bNorthing 如果報告的位置在赤道以北,該值為 TRUE,否則為 FALSE。 dwLatitude 緯度。該值與bNorthing一起從 NMEA 命令“GPRMC”中獲取。 bEasting 如果所報告的位置在格林威治本初子午線以東,該值為 TRUE,否則為 FALSE。 dwLongitude 經度。該值與bEasting一起從 NMEA 命令“GPRMC”中獲取。 dwBearing 方位。該值從 NMEA 命令“GPRMC”獲取。與接收器移動的羅盤方向對應。 dwSpeed 以厘米/小時計算的速度。該值從 NMEA 命令“GPRMC”獲取。與接收器移動的速度對應。 wFixYear GPS 定位時間的年份。該值從 NMEA 命令“GPRMC”獲取。 wFixMonth GPS 定位時間的月份。該值從 NMEA 命令“GPRMC”獲取。 wFixDay GPS 定位時間的日期。該值從 NMEA 命令“GPRMC”獲取。 wFixHour GPS 定位時間的小時。該值從 NMEA 命令“GPRMC”獲取。 wFixMinute GPS 定位時間的分鐘。該值從 NMEA 命令“GPRMC”獲取。 wFixSecond GPS 定位時間的秒數。該值從 NMEA 命令“GPRMC”獲取。 nSatellites  視圖中的衛星數該值從 NMEA 命令“GPRMC”獲取。 dwAntennaAltitude 以厘米計算的接收器在平均海平面以上的海拔高度,該值從 NMEA 命令“GPRMC”獲取。 wQualityIndicator 枚舉類型 GPS 質量指示器。該值從 NMEA 命令“GPRMC”獲取。該成員取下列值之一:

GpsQualityFixNotAvailable

GpsQualityFix

GpsQualityDifferentialFix

改進計劃:

創建 MFC 打包類,提供 GPSLIB C++ 接口。

解決 GPSLIB 控制面板程序對 MFC 庫的依賴問題,此問題解決後,代碼體積將減少很多。

縮小 GPSLIB DLLs 的體積,縮短客戶端程序加載 GPSLIB DLLs 的時間。

為客戶端程序提供支持:使其可同時使用相同的 GPS 設備。其難點和技術挑戰在於需要開發一個類似 TAPI 實現的那種框架。

如果你有任何關於 GPSLIB 的問題,請及時交流,以便進一步改進 GPSLIB 將來的版本。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved