[Shapelib] Converting my Shapefile C API reader to C#

C S usmsci at yahoo.com
Mon Jun 4 16:17:29 EDT 2007

hi all. i wrote a simple shapefile reader in C++ and
need to do the same now in C#. i am new to C# and
trying to get used to no include header files and
trying to wrap my head around assemblies. 

i would like to be able read in data from SHP & DBF
files   in C# but the API is in C. i have tried things
like doing DLL imports. i cannot write a C++/CLI
wrapper because i only have VS 2003. With that in mind
i have tried to write a straight C wrapper but am
unfamiliar with marshalling and not really sure how
all that works. most of the code out there that i have
seen doesn't involve 3rd party .DLL's. 

does anyone have any code/links with maybe an example
of how to read in a basic SHP or DBF file using C#? i
assume that since C# doesnt have header files i will
have to create the struct DBFInfo or the pointer to
the handle struct but i am not even sure the C#
compiler will be able to resolve that. here is the
code i have attempted: 

using System;
using System.Runtime.InteropServices;

namespace shapeFileReader
	struct DBFHandle
	 public IntPtr fpSHP;
	 public IntPtr fpSHX;
	 public int nShapeType;
	 public int nFileSize;
	 public int nRecords;
	 public int nMaxRecords;
	 public IntPtr panRecOffset;
	 public IntPtr panRecSize;
	 [MarshalAs(UnmanagedType.ByValArray, SizeConst=4)]
	 public double[] adBoundsMin;

	 [MarshalAs(UnmanagedType.ByValArray, SizeConst=4)]
	 public double[] adBoundsMax;
     public int bUpdated;
	 public IntPtr pabyRec;
	 public int nBufSize;

    class Class1
        static extern DBFHandle DBFOpen(string
pszShapeFile, string pszAccess);
		static void Main(string[] args)
         DBFHandle myHandle;
         myHandle = DBFOpen("file.dbf", "rb");
         Console.WriteLine("reading shapefile

some of this code i have gotten online and tried to
piece things together after reading a few other posts
but have come up short. i dont get any errors but i
get a Marshal Exception quoted here by the compiler:

'DefaultDomain': Loaded
No symbols loaded.
'shapeFileReader': Loaded 'C:\Apps\Microsoft Visual
Studio .NET
Symbols loaded.
An unhandled exception of type
occurred in shapeFileReader.exe

Additional information: Method's type signature is not
PInvoke compatible.

Unhandled Exception: The program '[3380]
shapeFileReader.exe' has exited with code 0 (0x0).
Method's type signature is not PInvoke compatible.
   at shapeFileReader.Class1.DBFOpen(String
pszShapeFile, String pszAccess)
   at shapeFileReader.Class1.Main(String[] args) in
c:\apps\microsoft visual studio .net

sorry for such a long post but i didnt want to leave
anything out. thanks in advance for your help!!!


Be a better Globetrotter. Get better travel answers from someone who knows. Yahoo! Answers - Check it out.

More information about the Shapelib mailing list