#include "cproj.h"/* Variables common to all subroutines in this code file
  -----------------------------------------------------*/
static double lon_center; /* Center longitude (projection center) */
static double R; /* Radius of the earth (sphere)  */
static double false_easting; /* x offset in meters */
static double false_northing; /* y offset in meters *//* Initialize the Sinusoidal projection
  ------------------------------------*/
sininvint(r, center_long,false_east,false_north) 
double r;  /* (I) Radius of the earth (sphere)  */
double center_long; /* (I) Center longitude  */
double false_east; /* x offset in meters */
double false_north; /* y offset in meters */
{
/* Place parameters in static storage for common use
  -------------------------------------------------*/
R = r;
lon_center = center_long;
false_easting = false_east;
false_northing = false_north;/* Report parameters to the user
  -----------------------------*/
ptitle("SINUSOIDAL"); 
radius(r);
cenlon(center_long);
offsetp(false_easting,false_northing);
return(OK);
}/* Sinusoidal inverse equations--mapping x,y to lat,long 
  -----------------------------------------------------*/
sininv(x, y, lon, lat)
double x; /* (I) X projection coordinate */
double y; /* (I) Y projection coordinate */
double *lon; /* (O) Longitude */
double *lat; /* (O) Latitude */
{
double adjust_lon();    /* Function to adjust longitude to -180 - 180 */
double temp; /* Re-used temporary variable *//* Inverse equations
  -----------------*/
x -= false_easting;
y -= false_northing;
*lat = y / R;
if (fabs(*lat) > HALF_PI) 
   {
   p_error("Input data error","sinusoidal-inverse");
   return(164);
   }
temp = fabs(*lat) - HALF_PI;
if (fabs(temp) > EPSLN)
   {
   temp = lon_center + x / (R * cos(*lat));
   *lon = adjust_lon(temp);
   }
else *lon = lon_center;
return(OK);
}
代码是这样的格式的,感觉他的写法不是很常见,这只是一小段,要是改写的话太多了,请问一下,想用这里面的函数,有什么比较好的办法了。

解决方案 »

  1.   

    上面就是.c文件里的内容啊 ,可是它的函数的 参数的类型是在函数里面定义的,这一点在c++中是有问题的,我在全是C的文件中编译了 是可以用的,但是在MFC中想用 出错了!
      

  2.   

    工程中插入.c文件,注意去掉该文件的预编译。然后拷贝上面代码过去使用前用
    extern"C" int sininvint( double  r,double  center_long,double  false_east,double false_north) ;
    声明一下就可以了
      

  3.   

    还有一点问题,就是这个C文件也有相应的头文件,还有用到其他的c文件的函数,我按你的说法做了 还存在的问题就是,这个C文件中调用的其他C文件的函数出现无法解析外部函数的,这个要怎么处理了,麻烦你再指导一下!
      

  4.   

    用到的C函数都得加上 extern "C"
      

  5.   

    将其他头文件添加进来,同时用到的C函数楼上都说了,加extern "C"
      

  6.   

    基本和被拉脸的狐狸说的一样的, MFC里 .c 要注意取消预编译头,然后cpp里调用的地方 extern "C"说明一下就可以了,一般是没问题的,最近还这么做过
      

  7.   

    改改不就行了?openssl有很多这种写法的程序,顺手就改成现在这种风格的了。
      

  8.   

    如果有很多这样的函数和.c 文件, 而且这些都不需要修改的话。
    我建议单独创建一个静态连接库,这样以后使用就更加方便。
    extern "C"
    {
    #include ...
    }