从一个函数传递到另一个函数的变化…不知道为什么?

我有一个非常奇怪的问题,我不明白。

这是C代码:

//below are the values being passed //long numTreePeriods = 80 //double length = 0.23013698630136986 TTimeLineInfo* tlInfo = GtoTimeLineInfoNew( (long)ceil(numTreePeriods/length), /*ppy*/ 0L, 1, FALSE); 

下面是上面调用的GtoTimeLineInfoNew函数的签名:

 __declspec(dllexport) TTimeLineInfo* GtoTimeLineInfoNew (long minPPY, /* (I) Min # ppy before switchDate */ TDate switchDate, /* (I) If 0, ignore ppy2; only use minPPY*/ long minPPY2, /* (I) Min # ppy after switchDate */ TBoolean wholeDayTPs); 

当我debugging我的代码,并进入具有上面指定的值的函数时,我得到:

 minPPY = -1636178017 

????? 什么会导致这种types的行为?

只是为了精确的C代码是一个DLL我要包装在C ++ / CLI。 尽pipe如此,这个问题似乎是独立的….

我不确定; 但我的猜测是如何将参数传递给C函数与C ++函数之间的区别。 尝试:

 extern "C" __declspec(dllexport) TTimeLineInfo* GtoTimeLineInfoNew ... 

出于某种原因, ceil(numTreePeriods/length)给了一些非常奇怪的东西。 所以我自己写了一个ceil函数来解决这个问题

更新:

像在glglgl的注释中突出显示的那样,相应的头文件丢失了,因此ceil被解释为返回一个导致有趣值的int。