1

我正在尝试使用 projAPI ( http://trac.osgeo.org/proj/wiki/ProjAPI ) 来计算预测。可悲的是,文档......嗯......不是那么好。另外,我在 C++ 编程方面也不是很好。VisualStudio 中的项目设置是一些火箭科学。无论如何,设置如下:

  • VC++ 目录 => 包含目录 => 添加了 lib 的包含目录
  • VC++ 目录 => 库目录 => 添加了 lib 目录,包含 .lib 文件
  • 链接器 => 输入 => 添加。依赖项 => 添加了“proj.lib”和“proj_i.lib”

项目包含一个用于测试目的的 cpp:

#include "../include/proj_api.h"

int main(int argc, char** argv){
    projPJ projection;
    projection = pj_init_plus("+proj=merc +ellps=clrk66 +lat_ts=33");
}

...像魅力一样编译...


来到 时pj_init_plus,它崩溃了:

Debug Assertion Failed!

Program: ...cuments\visual studio 2012\Projects\testLib\Debug\testLib.exe
File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c
Line: 1322

Expression: _CrtIsValidHeapPointer(pUserData)

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

忽略会引发第二个错误:

Debug Assertion Failed!

Program: ...cuments\visual studio 2012\Projects\testLib\Debug\testLib.exe
File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c
Line: 1328

Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

...主要问题是:错误在哪里?我编译库失败了吗?或者我的项目设置失败了吗?


编译库:

=>从 Visual Studio 树中运行VCVARS32.BAT ,然后

$cd to the downloaded directory
$nmake /f makefile.vc
$nmake /f makefile.vc install-all

检查C:\PROJ目录:一切都在那里,将 lib 和包含目录复制到我的项目中并尝试了它。

4

2 回答 2

1

所以,我让它工作了。显然问题只是在调试模式下发生。我切换到释放模式,它工作。

我的猜测是lib触发了一个以某种方式杀死调试钩子的函数......

于 2013-10-08T08:15:34.353 回答
0

看起来它需要一个真正的堆指针,尝试为你的字符串分配一个有足够空间的指针(记住额外的空字节!),strcpy 到那个,传递那个。

于 2013-10-07T14:17:31.383 回答