[Shapelib] Converting my Shapefile C API reader to C#
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:
public IntPtr fpSHP;
public IntPtr fpSHX;
public int nShapeType;
public int nFileSize;
public int nRecords;
public int nMaxRecords;
public IntPtr panRecOffset;
public IntPtr panRecSize;
public double adBoundsMin;
public double adBoundsMax;
public int bUpdated;
public IntPtr pabyRec;
public int nBufSize;
static extern DBFHandle DBFOpen(string
pszShapeFile, string pszAccess);
static void Main(string args)
myHandle = DBFOpen("file.dbf", "rb");
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:
No symbols loaded.
'shapeFileReader': Loaded 'C:\Apps\Microsoft Visual
An unhandled exception of type
occurred in shapeFileReader.exe
Additional information: Method's type signature is not
Unhandled Exception: The program '
shapeFileReader.exe' has exited with code 0 (0x0).
Method's type signature is not PInvoke compatible.
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