Click here to Skip to main content
11,927,378 members (49,431 online)
Click here to Skip to main content
Add your own
alternative version


45 bookmarked

Native DLL for GPS communication

, 22 Jul 2010 CPOL
Rate this:
Please Sign up or sign in to vote.
Giving full control over the communication with a GPS device in a limited environment.


The .NET Framework provides handy functions for communication with ports, such as the COM port required to read GPS data. This has been described in other articles on CodeProject.

Although these functions are also available in the Compact Framework, listening to GPS data by simply opening a stream using the correct COM port does not work, on many devices, due to limitations in the Compact Framework installed on the device.

This article describes a DLL written in C++ giving full control over the communication with the COM port. It exports functions to open, configure, and close the port, as well as read information form the port character by character.


When developing my Maplorer application (, I found that communication would only work from native applications, and only for a buffer size of one, single character. In principle, reading GPS data is fairly simple, as the GPS device constantly sends all readings to a (device-specific) COM port as a never-ending string. All you have to do is listen to that port and parse the string using the NMEA syntax. As .NET functionality was not available on my device, I developed a DLL to provide it.

Using the Code

The functions contained in the DLL can be used very easily in any .NET application via the DllImport statement; for example, to use the function in any of your classes, just add:

class MyClass 
    public static extern int InitGpsCom(int Port, int BaudRate, 
                  int ByteSize, int StopBits, int Parity);

    public static extern char ReadNextChar();

    public static extern int CloseGpsCom();

The three functions listed are used to open communications (InitGpsCom), read the next character (ReadNextChar), and free the port.

The ReadNextChar function can be easily used to read NMEA sentences, knowing that each new sentence starts with a '$' sign; for example, in C#, you would write something like this:

public String ReadNextSentence()
    String result = "";
    char c;

    while ((c = ReadNextChar()) != '$')
        result += c;
    result = "$" + result;

    return result;
} provides a complete example for using the DLL in C#, including an NMEA class to parse NMEA sentences and determine latitude, longitude, bearing, etc.

Points of Interest

This project mainly shows you that you can always gain control of a device on your own: if functionality is not available in your programming environment, you can usually find it one level deeper!

The drawback of this solution is the fact that it limits your applications to the CPU architecture the DLL is compiled for - you now run native code, not only .NET byte code.


  • Version 1.0: February 2010.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Software Developer (Senior)
France France
I am an IT professional working in the field of graphical user interfaces, building and system simulation software.

My passion are portable devices, from robots to cell phones and GPS systems, which I enjoy using, customizing and programming in my free time.

I currently write a free moving-map application for GPS devices:

You may also be interested in...

Comments and Discussions

QuestionBest GPS based system example souce code Pin
kasun61810-Oct-13 23:39
memberkasun61810-Oct-13 23:39 
QuestionGreat job! Pin
Helios_vmg2-Aug-12 19:38
memberHelios_vmg2-Aug-12 19:38 
QuestionMissingMethodException was unhandled Pin
LuiG84-Oct-10 11:41
memberLuiG84-Oct-10 11:41 
AnswerRe: MissingMethodException was unhandled Pin
werner.keilholz4-Oct-10 12:10
memberwerner.keilholz4-Oct-10 12:10 
GeneralRe: MissingMethodException was unhandled Pin
LuiG85-Oct-10 1:22
memberLuiG85-Oct-10 1:22 
GeneralRe: MissingMethodException was unhandled Pin
werner.keilholz5-Oct-10 12:47
memberwerner.keilholz5-Oct-10 12:47 
Generalgreat job , thanks . Pin
Member 228177120-Sep-10 14:32
memberMember 228177120-Sep-10 14:32 
GeneralRe: great job , thanks . Pin
werner.keilholz21-Sep-10 8:32
memberwerner.keilholz21-Sep-10 8:32 
GeneralMy vote of 5 Pin
Dr. Jones DK29-Jun-10 10:55
memberDr. Jones DK29-Jun-10 10:55 
Generalgood work Pin
loyal ginger16-Jun-10 5:34
memberloyal ginger16-Jun-10 5:34 
GeneralRe: good work Pin
werner.keilholz16-Jun-10 13:11
memberwerner.keilholz16-Jun-10 13:11 
GeneralMy vote of 1 Pin
KarstenK15-Jun-10 23:29
memberKarstenK15-Jun-10 23:29 
GeneralRe: My vote of 1 Pin
werner.keilholz16-Jun-10 13:10
memberwerner.keilholz16-Jun-10 13:10 
GeneralI can't build it in VS 2008 Pin
franva15-Jun-10 21:17
memberfranva15-Jun-10 21:17 
GeneralRe: I can't build it in VS 2008 Pin
werner.keilholz16-Jun-10 13:09
memberwerner.keilholz16-Jun-10 13:09 

You will fin the DLL in the second zip,, both release and debug version.

Hope this is helpful,

GeneralRe: I can't build it in VS 2008 Pin
franva16-Jun-10 23:55
memberfranva16-Jun-10 23:55 
GeneralRe: I can't build it in VS 2008 Pin
Mr.Jinky20-Jun-10 21:25
memberMr.Jinky20-Jun-10 21:25 
GeneralRe: I can't build it in VS 2008 Pin
werner.keilholz21-Jun-10 8:11
memberwerner.keilholz21-Jun-10 8:11 
QuestionIs there any API Document? Pin
franva15-Jun-10 20:23
memberfranva15-Jun-10 20:23 
AnswerRe: Is there any API Document? Pin
werner.keilholz16-Jun-10 13:08
memberwerner.keilholz16-Jun-10 13:08 
GeneralRe: Is there any API Document? Pin
franva16-Jun-10 23:57
memberfranva16-Jun-10 23:57 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.151126.1 | Last Updated 22 Jul 2010
Article Copyright 2010 by werner.keilholz
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid