ShapeLib是一个用C编写的开源Shape文件操作库,提供对Shp和DBF文件的操作函数。一般来说,希望将其编译成独立的dll文件后在自己的项目中使用,从网站上下载其最新源码http://dl.maptools.org/dl/shapelib/ 幸运的是,如果您的项目是基于Windows的,那么可以直接从网站上下载到编译好的.dll,甚至可以找到.net wrapperhttp://shapelib.maptools.org/dl/contrib/DotNetArchive.zip 可咱偏偏需要在Window Mobile上使用这个东东,没办法只有自己编译了。编译之前请确保安装了Windows Mobile SDK。 编译过程如下: 1、下载源码后,在Visual Studio中创建一个VC++的Win32 智能设备项目,项目类型为动态链接库 2、将源码的shapefil.h、dbfopen.c、shpopen.c、shptree.c、shapelib.def加入项目; 3、打开项目属性对话框,展开配置属性\c/c++\预处理,在预处理定义中增加SHPAPI_CALL=__stdcall 4、展开配置属性\c/c++\代码生成,选择运行库为多线程调试 DLL (/MDd),当然如果是编译Release版本可以选择多线程 DLL 理论上即可编译完成,但在Windows Mobile平台上还没有这么简单,因为其不支持time.h,幸好openNETCF提供了开源的实现,可以在http://www.opennetcf.com/FreeSoftware/OpenTimeCE/tabid/247/Default.aspx下载其源码 5、将time_ce.h和time_ce.cpp加入项目,此时需要确保编译器具有/Tp选项(编译为c++代码,默认) 6、修改shptree.c 497~499行修改为: psTreeNode->panShapeIds = 504~507行修改为 psTreeNode->papsShapeObj = 7、修改dbfopen.c 194行修改为:#include "time_ce.h" 8、修改time_ce.h 。好吧,我承认要给出最丑陋的代码了。 在文件最后#endif前边增加: #define time time_ce 9、如果是在Windows Mobile 5.0以上的环境编译,还需要修改time_ce.h 在35行#pragma comment(lib, "secchk.lib")前增加注释。 至此即可顺利完成编译。 原文地址: http://www.cnblogs.com/ankh/archive/2008/11/13/1332671.html |
移植ShapeLib到WinCE平台
最新推荐文章于 2024-04-28 21:51:47 发布
2009-11-27 16:51