c – 错误LNK2019:Visual Studio中未解析的外部符号

前端之家收集整理的这篇文章主要介绍了c – 错误LNK2019:Visual Studio中未解析的外部符号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > What is an undefined reference/unresolved external symbol error and how do I fix it?29个
我已经从SBIG网站下载了这个C代码,以便控制(拍照并保存)我从他们那里购买的相机(型号ST-401ME).我有一个需要调用它的Matlab程序,所以我试图用它的头和库编译(用Visual Studio)这个代码到一个可执行文件中.但是,当我尝试时,我得到上述错误.请注意,我已将包含库的文件添加到目录路径中.

输出的确切措辞是这样的:

1>------ Build started: Project: CaptureImage,Configuration: Debug Win32 ------
1>Compiling...
1>main.cpp
1>Linking...
1>csbigcam.obj : error LNK2019: unresolved external symbol _SBIGUnivDrvCommand@12 referenced in function "public: enum PAR_ERROR __thiscall CSBIGCam::SBIGUnivDrvCommand(short,void *,void *)" (?SBIGUnivDrvCommand@CSBIGCam@@QAE?AW4PAR_ERROR@@FPAX0@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffclos referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::SaveFITS(char const *)" (?SaveFITS@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffprec referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::SaveFITS(char const *)" (?SaveFITS@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffpky referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::SaveFITS(char const *)" (?SaveFITS@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffuky referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::SaveFITS(char const *)" (?SaveFITS@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffppr referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::SaveFITS(char const *)" (?SaveFITS@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffcrim referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::SaveFITS(char const *)" (?SaveFITS@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffinit referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::SaveFITS(char const *)" (?SaveFITS@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffphis referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::History2FITS(struct fitsfile *)" (?History2FITS@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PAUfitsfile@@@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffmrhd referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::ReadFITSImage(char const *)" (?ReadFITSImage@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffgrec referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::ReadFITSImage(char const *)" (?ReadFITSImage@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffghsp referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::ReadFITSImage(char const *)" (?ReadFITSImage@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffghdn referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::ReadFITSImage(char const *)" (?ReadFITSImage@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffgkyj referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::ReadFITSImage(char const *)" (?ReadFITSImage@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffgkyd referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::ReadFITSImage(char const *)" (?ReadFITSImage@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffgkys referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::ReadFITSImage(char const *)" (?ReadFITSImage@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffgpxv referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::ReadFITSImage(char const *)" (?ReadFITSImage@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffgipr referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::ReadFITSImage(char const *)" (?ReadFITSImage@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>csbigimg.obj : error LNK2019: unresolved external symbol _ffopen referenced in function "public: enum SBIG_FILE_ERROR __thiscall CSBIGImg::ReadFITSImage(char const *)" (?ReadFITSImage@CSBIGImg@@QAE?AW4SBIG_FILE_ERROR@@PBD@Z)
1>I:\My Documents\Visual Studio 2008\Projects\CaptureImage\Debug\CaptureImage.exe : fatal error LNK1120: 19 unresolved externals
1>Build log was saved at "file://i:\My Documents\Visual Studio 2008\Projects\CaptureImage\CaptureImage\Debug\BuildLog.htm"
1>CaptureImage - 20 error(s),0 warning(s)
========== Build: 0 succeeded,1 Failed,0 up-to-date,0 skipped ==========

我认为这与链接库有关.我从来没有在Visual Studio中学会过如何做到这一点,而且我在大学读取的课程是在5年前,所以我几乎没有记住任何东西.

由于代码的长度,我只会错误地发生错误的部分.如果您想要更多(如主要),请告诉我.

码:

csbigcam.cpp

#include "lpardrv.h"
#include "sbigudrv.h"
#include "csbigcam.h"
#include "csbigimg.h"
#include <string>
#include <math.h>

using namespace std;

#ifndef INVALID_HANDLE_VALUE
#define INVALID_HANDLE_VALUE -1
#endif

#define VERSION_STR     "1.2"   /* version of this class */

/*

 Temperature Conversion Constants
 Defined in the SBIG Universal Driver Documentation

*/
#define T0      25.0
#define R0       3.0
#define DT_CCD  25.0
#define DT_AMB  45.0
#define RR_CCD   2.57
#define RR_AMB   7.791
#define RB_CCD  10.0
#define RB_AMB   3.0
#define MAX_AD  4096

.
.
.

PAR_ERROR CSBIGCam::GetFullFrame(int &nWidth,int &nHeight)
{
    GetCCDInfoResults0 gcir;
    GetCCDInfoParams gcip;
    unsigned short vertNBinning;
    unsigned short rm;

    // Get the image dimensions
    vertNBinning = m_uReadoutMode >> 8;
    if ( vertNBinning == 0 )
        vertNBinning = 1;
    rm = m_uReadoutMode & 0xFF;
    gcip.request = (m_eActiveCCD == CCD_IMAGING ? CCD_INFO_IMAGING : CCD_INFO_TRACKING);
    if ( SBIGUnivDrvCommand(CC_GET_CCD_INFO,&gcip,&gcir) != CE_NO_ERROR )
        return m_eLastError;
    if ( rm >= gcir.readoutModes )
        return CE_BAD_PARAMETER;
    nWidth = gcir.readoutInfo[rm].width;
    if ( rm >=3 && rm <= 5 )
        nHeight = gcir.readoutInfo[rm-3].height / vertNBinning;
    else
        nHeight = gcir.readoutInfo[rm].height / vertNBinning;
    return CE_NO_ERROR;
}

.
.
.

csbigcam.h

#ifndef _CSBIGCAM_
#define _CSBIGCAM_

#ifndef _PARDRV_
 #include "sbigudrv.h"
#endif

#ifndef _CSBIGIMG_
 #include "csbigimg.h"
#endif

#include <string>
using namespace std;

typedef enum {RELAY_XPLUS,RELAY_XMINUS,RELAY_YPLUS,RELAY_YMINUS } CAMERA_RELAY;
typedef enum {SBDF_LIGHT_ONLY,SBDF_DARK_ONLY,SBDF_DARK_ALSO } SBIG_DARK_FRAME;
typedef enum {GS_IDLE,GS_DAWN,GS_EXPOSING_DARK,GS_DIGITIZING_DARK,GS_EXPOSING_LIGHT,GS_DIGITIZING_LIGHT,GS_DUSK } GRAB_STATE;

class CSBIGCam {
private:
    PAR_ERROR m_eLastError;
    PAR_COMMAND m_eLastCommand;
    short m_nDrvHandle;
    CAMERA_TYPE m_eCameraType;
    CCD_REQUEST m_eActiveCCD;
    double m_dExposureTime;
    unsigned short m_uReadoutMode;
    ABG_STATE7 m_eABGState;
    int m_nSubFrameLeft,m_nSubFrameTop,m_nSubFrameWidth,m_nSubFrameHeight;
    GRAB_STATE m_eGrabState;
    double m_dGrabPercent;
    CFW_MODEL_SELECT m_eCFWModel;
    CFW_ERROR m_eCFWError;
    struct {
        unsigned short vertNBinning,hBin,vBin;
        unsigned short rm;
        int left,top,width,height;
    } m_sGrabInfo;

public:
    // Constructors/Destructors
    CSBIGCam();
    CSBIGCam(OpenDeviceParams odp);
    CSBIGCam(SBIG_DEVICE_TYPE dev);
    ~CSBIGCam();
    void Init();

    // Error Reporting Routines
    PAR_ERROR GetError();
    string GetErrorString();
    string GetErrorString(PAR_ERROR err);
    PAR_COMMAND GetCommand();

    // Accessor Functions
    double GetExposureTime(void) { return m_dExposureTime; }
    void SetExposureTime(double exp) { m_dExposureTime = exp; }
    CCD_REQUEST GetActiveCCD(void) { return m_eActiveCCD; }
    void SetActiveCCD(CCD_REQUEST ccd) { m_eActiveCCD = ccd; }
    unsigned short GetReadoutMode(void) { return m_uReadoutMode; }
    void SetReadoutMode(unsigned short rm) { m_uReadoutMode = rm; }
    CAMERA_TYPE GetCameraType(void) { return m_eCameraType; }
    ABG_STATE7 GetABGState(void) { return m_eABGState; }
    void SetABGState(ABG_STATE7 abgState) { m_eABGState = abgState; }
    void SetSubFrame(int nLeft,int nTop,int nWidth,int nHeight);
    void GetSubFrame(int &nLeft,int &nTop,int &nWidth,int &nHeight);
    PAR_ERROR GetReadoutInfo(double &pixelWidth,double &pixelHeight,double &eGain);

    // Driver/Device Routines
    PAR_ERROR OpenDriver();
    PAR_ERROR CloseDriver();
    PAR_ERROR OpenDevice(OpenDeviceParams odp);
    PAR_ERROR CloseDevice();
    PAR_ERROR GetDriverInfo(DRIVER_REQUEST request,GetDriverInfoResults0 &gdir);

    // High-Level Exposure Related Commands
    PAR_ERROR GrabSetup(CSBIGImg *pImg,SBIG_DARK_FRAME dark);
    PAR_ERROR GrabMain(CSBIGImg *pImg,SBIG_DARK_FRAME dark);
    PAR_ERROR GrabImage(CSBIGImg *pImg,SBIG_DARK_FRAME dark);
    void GetGrabState(GRAB_STATE &grabState,double &percentComplete);

    // Low-Level Exposure Related Commands
    PAR_ERROR StartExposure(SHUTTER_COMMAND shutterState);
    PAR_ERROR EndExposure(void);
    PAR_ERROR IsExposureComplete(MY_LOGICAL &complete);
    PAR_ERROR StartReadout(StartReadoutParams srp);
    PAR_ERROR EndReadout(void);
    PAR_ERROR ReadoutLine(ReadoutLineParams rlp,MY_LOGICAL darkSubtract,unsigned short *dest);
    PAR_ERROR DumpLines(unsigned short noLines);

    //Temperature Related Commands
    PAR_ERROR GetCCDTemperature(double &ccdTemp);
    PAR_ERROR SetTemperatureRegulation(MY_LOGICAL enable,double setpoint);
    PAR_ERROR QueryTemperatureStatus(MY_LOGICAL &enabled,double &ccdTemp,double &setpointTemp,double &percentTE);

    // Control Related Commands
    PAR_ERROR ActivateRelay(CAMERA_RELAY relay,double time);
    PAR_ERROR IsRelayActive(CAMERA_RELAY relay,MY_LOGICAL &active);
    PAR_ERROR AOTipTilt(AOTipTiltParams attp);
    PAR_ERROR CFWCommand(CFWParams cfwp,CFWResults &cfwr);

    // General Purpose Commands
    PAR_ERROR EstablishLink(void);
    string GetCameraTypeString(void);
    PAR_ERROR GetFullFrame(int &nWidth,int &nHeight);
    PAR_ERROR GetFormattedCameraInfo(string &ciStr,MY_LOGICAL htmlFormat = TRUE);

    // Utility functions
    MY_LOGICAL CheckLink(void);
    unsigned short DegreesCToAD(double degC,MY_LOGICAL ccd = TRUE);
    double ADToDegreesC(unsigned short ad,MY_LOGICAL ccd = TRUE);

    //CFW Functions
    CFW_MODEL_SELECT GetCFWModel(void) { return m_eCFWModel; }
    PAR_ERROR SetCFWModel(CFW_MODEL_SELECT cfwModel,CFW_COM_PORT comPort = CFWPORT_COM1);
    PAR_ERROR SetCFWPosition(CFW_POSITION position);
    PAR_ERROR GetCFWPositionAndStatus(CFW_POSITION &position,CFW_STATUS &status);
    PAR_ERROR GetCFWMaxPosition(CFW_POSITION &position);
    CFW_ERROR GetCFWError(void) { return m_eCFWError; }
    string GetCFWErrorString(CFW_ERROR err);
    string GetCFWErrorString(void);

    // Allows access directly to driver
    PAR_ERROR SBIGUnivDrvCommand(short command,void *Params,void *Results);
};

#endif /* #ifndef _CSBIGCAM_ */

csbigimg.ccp

#include "lpardrv.h"
#include "csbigimg.h"
#include <stdio.h>
#include <string.h>
#include <string>

/*
 Local Constants
*/
#if TARGET == ENV_MACOSX
    #define LONGLONG long long
#endif
#define FILE_VERSION    3       /* current header version written */
#define DATA_VERSION    1       /* current data version written */
#define HEADER_LEN      2048
#define VERSION_STR     "1.2"   /* version of this class */
static const char   *HEADER_KEYWORDS[] =
{
    "File_version = ","Data_version = ","Exposure = ","Focal_length = ","Aperture = ","Response_factor = ","Note = ","Background = ","Range = ","Height = ","Width = ","Date = ","Time = ","Exposure_state = ","Temperature = ","Number_exposures = ","Each_exposure = ","History = ","Observer = ","X_pixel_size = ","Y_pixel_size = ","Pedestal = ","E_gain = ","User_1 = ","User_2 = ","User_3 = ","User_4 = ","Filter = ","Readout_mode = ","Track_time = ","Sat_level = ","End"
};
typedef enum
{
    HH_FILE_VERSION,HH_DATA_VERSION,HH_EXPOSURE,HH_FOCAL_LENGTH,HH_APERTURE,HH_RESPONSE_FACTOR,HH_NOTE,HH_BACKGROUND,HH_RANGE,HH_HEIGHT,HH_WIDTH,HH_DATE,HH_TIME,HH_EXPOSURE_STATE,HH_TEMPERATURE,HH_NUMBER_EXPOSURES,HH_EACH_EXPOSURE,HH_HISTORY,HH_OBSERVER,HH_X_PIXEL_SIZE,HH_Y_PIXEL_SIZE,HH_PEDESTAL,HH_E_GAIN,HH_USER_1,HH_USER_2,HH_USER_3,HH_USER_4,HH_FILTER,HH_READOUT_MODE,HH_TRACK_TIME,HH_SAT_LEVEL,HH_END
} SBIG_HEADER_HEADING;

.
.
.

#if INCLUDE_FITSIO
            /* save file in FITS format */
            res = SaveFITS(pFullPath);
#else

.
.
.

SBIG_FILE_ERROR CSBIGImg::History2FITS(fitsfile *fptr)
{
    int         status = 0;
    const char  *msg,*p;
    char        c,*cp = (char*)m_cHistory.c_str();
    int         index;
    MY_LOGICAL  first = TRUE;

    while (*cp) {
        c = *cp++;
        if ( (p=strchr(HISTORY_CHARS,c)) != NULL ) {
            index = (p - HISTORY_CHARS)/sizeof(const char);
            msg = HISTORY_PHRASES[index];
        } else if ( c == '0' )
            continue;
        else
            msg = "???";

        if ( first )
            fits_write_key(fptr,TSTRING,"SWMODIFY",(void *)m_cSoftware.c_str(),"",&status);
        first = FALSE;

        if (fits_write_history(fptr,msg,&status)) {
            return SBFE_FITS_HEADER_ERROR;
        }
    }
    return SBFE_NO_ERROR;
}

.
.
.

SBIG_FILE_ERROR CSBIGImg::ReadFITSImage(char const *pFullPath)
{
SBIG_FILE_ERROR err = SBFE_FORMAT_ERROR;
fitsfile *fptr;         /* FITS file pointer,defined in fitsio.h */
char card[FLEN_CARD];   /* Standard string lengths defined in fitsio.h */
int status = 0;         /* CFITSIO status value MUST be initialized to zero! */
int hdupos,nkeys,ii,jj;
int bitpix,naxis;
long naxes[2] = {1,1},fpixel[2] = {1,1};
unsigned short *uip;
long l,l2;
double d;
char s[80];
MY_LOGICAL first = TRUE;
struct tm obs;

if (!fits_open_file(&fptr,pFullPath,READONLY,&status))
{
    do {        // Allow to break out
        // get and check the dimensions
        if ( fits_get_img_param(fptr,2,&bitpix,&naxis,naxes,&status) ) break;
        if ( bitpix != 16 || naxis != 2 ) break;

        // allocate the buffer
        err = SBFE_MEMORY_ERROR;
        if ( !AllocateImageBuffer(naxes[1],naxes[0]) ) break;
        uip = GetImagePointer();

        // read the image data
        err = SBFE_READ_ERROR;
        if ( fits_read_pix(fptr,TUSHORT,fpixel,naxes[0]*naxes[1],NULL,uip,&status) ) break;

        // try and read the SBIG keys
        status = 0; if ( !fits_read_key_str(fptr,FITS_KEYS[FK_OBJ],s,&status) )    SetFITSObject(s);
        status = 0; if ( !fits_read_key_str(fptr,FITS_KEYS[FK_SCOPE],&status) )  SetFITSTelescope(s);
        status = 0; if ( !fits_read_key_str(fptr,FITS_KEYS[FK_INST],&status) )   SetCameraModel(s);
        status = 0; if ( !fits_read_key_str(fptr,FITS_KEYS[FK_OBS],&status) )    SetObserver(s);
        status = 0; if ( !fits_read_key_str(fptr,FITS_KEYS[FK_DATEOBS],&status) ) {
                        if ( sscanf(s,"%4d-%2d-%2dT%2d.%2d.%2d",&obs.tm_year,&obs.tm_mon,&obs.tm_mday,&obs.tm_hour,&obs.tm_min,&obs.tm_sec) == 6 ) {
                            obs.tm_year -= 1900; obs.tm_mon -= 1;
                            memcpy(&m_sDecodedImageStartTime,&obs,sizeof(struct tm));
                        }
                    }
        status = 0; if ( !fits_read_key_dbl(fptr,FITS_KEYS[FK_EXP],&d,&status) )   SetExposureTime(d);
        status = 0; if ( !fits_read_key_dbl(fptr,FITS_KEYS[FK_CCDT],&status) )  SetCCDTemperature(d);
        status = 0; if ( !fits_read_key_dbl(fptr,FITS_KEYS[FK_PIXX],&status) )  SetPixelWidth(d/1000.0);
        status = 0; if ( !fits_read_key_dbl(fptr,FITS_KEYS[FK_PIXY],&status) )  SetPixelHeight(d/1000.0);
        status = 0; if ( !fits_read_key_lng(fptr,FITS_KEYS[FK_BINX],&l,&status) &&
                         !fits_read_key_lng(fptr,FITS_KEYS[FK_BINY],&l2,&status) ) SetBinning((unsigned short)l,(unsigned short)l2);
        status = 0; if ( !fits_read_key_lng(fptr,FITS_KEYS[FK_ORGX],FITS_KEYS[FK_ORGY],&status) ) SetSubFrame((unsigned short)l,(unsigned short)l2);
        status = 0; if ( !fits_read_key_dbl(fptr,FITS_KEYS[FK_EGAIN],&status) )     SetEGain(d);
        status = 0; if ( !fits_read_key_dbl(fptr,FITS_KEYS[FK_FL],&status) )    SetFocalLength(d/25.4);
        status = 0; if ( !fits_read_key_dbl(fptr,FITS_KEYS[FK_APTD],&status) )  SetApertureDiameter(d/25.4);
        status = 0; if ( !fits_read_key_dbl(fptr,FITS_KEYS[FK_APTA],&status) )  SetApertureArea(d/25.4/25.4);
        status = 0; if ( !fits_read_key_lng(fptr,FITS_KEYS[FK_BLACK],&status) ) SetBackground(l);
        status = 0; if ( !fits_read_key_lng(fptr,FITS_KEYS[FK_WHITE],&status) ) SetRange(l - GetBackground());
        status = 0; if ( !fits_read_key_lng(fptr,FITS_KEYS[FK_PED],&status) )   SetPedestal((unsigned short)(l+100));
        status = 0; if ( !fits_read_key_lng(fptr,FITS_KEYS[FK_MAX],&status) )   SetSaturationLevel((unsigned short)l);
        status = 0; if ( !fits_read_key_str(fptr,FITS_KEYS[FK_SWA],&status) )   SetSoftware(s);
        status = 0; if ( !fits_read_key_str(fptr,FITS_KEYS[FK_FILT],&status) )  SetFilter(s);
        status = 0; if ( !fits_read_key_lng(fptr,FITS_KEYS[FK_SNAP],&status) )  SetNumberExposures((unsigned short)l);
                                                                                            SetEachExposure(GetExposureTime()/l);
        status = 0; if ( !fits_read_key_lng(fptr,FITS_KEYS[FK_RES],&status) )   SetReadoutMode((unsigned short)l);
        status = 0; if ( !fits_read_key_str(fptr,FITS_KEYS[FK_EXPST],&status) && sscanf(s,"%lX",&l) == 1 ) SetExposureState((unsigned short)l);
        status = 0; if ( !fits_read_key_dbl(fptr,FITS_KEYS[FK_RESP],&status) )  SetResponseFactor(d);
        status = 0; if ( !fits_read_key_str(fptr,FITS_KEYS[FK_NOTE],&status) )      SetImageNote(s);
        status = 0; if ( !fits_read_key_dbl(fptr,FITS_KEYS[FK_TRAK],&status) )  SetTrackExposure(d);
        status = 0;

        // read and filter out the parsed keywords
        fits_get_hdu_num(fptr,&hdupos);  /* Get the current HDU position */
        for (; !status; hdupos++)  /* Main loop through each extension */
        {
            fits_get_hdrspace(fptr,&nkeys,&status); /* get # of keywords */
            for (ii = 1; ii <= nkeys; ii++) { /* Read and print each keywords */
                if (fits_read_record(fptr,card,&status)) break;
                for (jj=0; jj<FK_NEXT; jj++) {
                    l = strlen(FITS_KEYS[jj]);
                    if ( strncmp(card,FITS_KEYS[jj],l) == 0 ) break;
                }
                if ( jj == FK_NEXT ) {
                    if ( !first ) m_cAdditionalFITSKeys += "\r";
                    m_cAdditionalFITSKeys += card ;
                    first = FALSE;
                }
            }
            fits_movrel_hdu(fptr,1,&status);  /* try to move to next HDU */
        }
        if (status == END_OF_FILE)  status = 0; /* Reset after normal error */
        if ( status ) break;            

        // got here so there was no error
        err = SBFE_NO_ERROR;
        m_nDefaultImageFormat = SBIF_FITS;
    } while ( FALSE );
    fits_close_file(fptr,&status);
}

if (err == SBFE_NO_ERROR && status)
    err = SBFE_FORMAT_ERROR;
if ( err != SBFE_NO_ERROR )
    DeleteImageData();
return(err);
}
#endif

csbigimg.h

#ifndef _CSBIGIMG_
    #define _CSBIGIMG_
/*
  Compile Time Options
*/
    #define INCLUDE_FITSIO  1       /* set to 1 to compile and link with FITSIO Library */

    #ifndef _LPARDRV_
        #include "lpardrv.h"
    #endif
    #include <time.h>
    #include <string>

using namespace std;

    #if INCLUDE_FITSIO
        #include "fitsio.h"
    #endif  /* INCLUDE_FITSIO */

#ifndef PI
    #define PI  3.1415926535
#endif

/*
 Exposure State Field Defines
*/
    #define ES_ABG_MASK             0x0003
    #define ES_ABG_UNKNOWN          0x0000
    #define ES_ABG_LOW              0x0001
    #define ES_ABG_CLOCKED          0x0002
    #define ES_ABG_MID              0x0003

    #define ES_ABG_RATE_MASK        0x00C0
    #define ES_ABG_RATE_FIXED       0x0000
    #define ES_ABG_RATE_LOW         0x0040
    #define ES_ABG_RATE_MED         0x0080
    #define ES_ABG_RATE_HI          0x00C0

    #define ES_DCS_MASK             0x000c
    #define ES_DCS_UNKNOWN          0x0000
    #define ES_DCS_ENABLED          0x0004
    #define ES_DCS_DISABLED         0x0008

    #define ES_DCR_MASK             0x0030
    #define ES_DCR_UNKNOWN          0x0000
    #define ES_DCR_ENABLED          0x0010
    #define ES_DCR_DISABLED         0x0020

    #define ES_AUTOBIAS_MASK        0x0100
    #define ES_AUTOBIAS_ENABLED     0x0100
    #define ES_AUTOBIAS_DISABLED    0x0000

typedef enum { SBIF_COMPRESSED,SBIF_UNCOMPRESSED,SBIF_FITS,SBIF_DEFAULT } SBIG_IMAGE_FORMAT;
typedef enum
{
    SBFE_NO_ERROR,SBFE_OPEN_ERROR,SBRE_CLOSE_ERROR,SBFE_READ_ERROR,SBFE_WRITE_ERROR,SBFE_FORMAT_ERROR,SBFE_MEMORY_ERROR,SBFE_FITS_HEADER_ERROR,SBFE_WRONG_SIZE,SBFE_NEXT_ERROR
} SBIG_FILE_ERROR;

class CSBIGImg
{
/* */
private:
    int                 m_nHeight,m_nWidth;            // image size in pixels
    int                 m_nSubFrameTop,m_nSubFrameLeft;// for partial frames the top-left pixel
    unsigned short      *m_pImage;                      // pointer to image data
    double              m_dCCDTemperature;              // CCD Temp at start of exposure
    double              m_dExposureTime;                // Exposure time in seconds
    double              m_dTrackExposure;               // Exposure when tracking
    double              m_dEachExposure;                // Snapshot time in seconds
    double              m_dFocalLength;                 // Lens/Telescope Focal Length in inches
    double              m_dApertureArea;                // Lens/Telescope Aperture Are in Sq-Inches
    double              m_dResponseFactor;              // Magnitude Calibration Factor
    double              m_dPixelHeight,m_dPixelWidth;  // Pixel Dimensions in mm
    double              m_dEGain;                       // Electronic Gain,e-/ADU
    long                m_lBackground,m_lRange;        // Display Background and Range
    unsigned short      m_uNumberExposures;             // Number of exposures co-added
    unsigned short      m_uSaturationLevel;             // Pixels at this level are saturated
    unsigned short      m_uPedestal;                    // Image Pedestal
    unsigned short      m_uExposureState;               // Exposure State
    unsigned short      m_uReadoutMode;                 // Camera Readout Mode use to acquire image
    unsigned short      m_uHorizontalBinning;           // Binning used in X
    unsigned short      m_uVerticalBinning;             // Binning used in Y
    string              m_cImageNote;                   // Note attached to image
    string              m_cObserver;                    // Observer name
    string              m_cHistory;                     // Image History string of modification chars
    string              m_cFilter;                      // Filter name imaged through
    string              m_cSoftware;                    // Software App Name and Version
    string              m_cCameraModel;                 // Model of camera used to acquire image
    int                 m_isCompressed;                 // clc
    MY_LOGICAL          m_bImageModified;               // True when modified and not saved
    SBIG_IMAGE_FORMAT   m_nDefaultImageFormat;          // default image format for Saves
    struct tm           m_sDecodedImageStartTime;       // Decoded time light exposure started
    MY_LOGICAL          m_bImageCanClose;               // TRUE when image can be closed,FALSE if owned by
                                                        //  a CSBIGCam object and acquiring data

/* */
public:
    /* Constructors/Destructor */
    CSBIGImg(void);
    CSBIGImg(int height,int width);
    ~               CSBIGImg(void);

    void            Init(void);
    void            DeleteImageData(void);
.
.
.
    /* More Accessor Functions */
    void            SetImageStartTime(void);
    void            SetImageStartTime(time_t startTime);
    void            SetImageStartTime(int mon,int dd,int yy,int hr,int min,int sec);
    void            SetImageStartTime(struct tm *pStartTime);
    void            SetSubFrame(int nLeft,int nTop);
    void            GetSubFrame(int &nLeft,int &nTop);
    void            SetBinning(unsigned short nHoriz,unsigned short nVert);
    void            GetBinning(unsigned short &nHoriz,unsigned short &nVert);
    void            AddHistory(string str);

    /* File IO Routines */
    SBIG_FILE_ERROR SaveImage(const char *pFullPath,SBIG_IMAGE_FORMAT fmt = SBIF_DEFAULT);
    SBIG_FILE_ERROR OpenImage(const char *pFullPath);

    /* Utility Functions */
    MY_LOGICAL      AllocateImageBuffer(int height,int width);
    void            CreateSBIGHeader(char *pHeader,MY_LOGICAL isCompressed);
    MY_LOGICAL      ParseHeader(char *pHeader,MY_LOGICAL &isCompressed);
    SBIG_FILE_ERROR SaveCompressedImage(const char *pFullPath,char *pHeader);
    SBIG_FILE_ERROR ReadCompressedImage(FILE *fh);
    SBIG_FILE_ERROR SaveUncompressedImage(const char *pFullPath,char *pHeader);
    SBIG_FILE_ERROR ReadUncompressedImage(FILE *fh);    
    int             CompressSBIGData(unsigned char *pCmpData,int imgRow);
    void            IntelCopyBytes(unsigned char *pRevData,int imgRow);
    void            AutoBackgroundAndRange(void);
    string          GetFileErrorString(SBIG_FILE_ERROR err);
    unsigned short  GetAveragePixelValue(void);
    unsigned short  GetAveragePixelValue(int left,int top,int width,int height);
    void            GetFormattedImageInfo(string &iiStr,MY_LOGICAL htmlFormat = TRUE);

    /* Image Processing Funcions */
    void            VerticalFlip(void);
    void            HorizontalFlip(void);
    SBIG_FILE_ERROR DarkSubtract(CSBIGImg *pImg);
    SBIG_FILE_ERROR FlatField(CSBIGImg *pImg);

    /* Color Image Processing */
    void            RemoveBayerColor(void);

#if INCLUDE_FITSIO
private:
    string          m_cFITSObject;                      // Name of object in FITS header
    string          m_cFITSTelescope;                   // Name of telescope in FITS header
    double          m_dApertureDiameter;     // Diameter of telescope
    string          m_cAdditionalFITSKeys;              // additional FITS keywords

public:
    /* FITS Accessor functions */
    void        SetFITSObject(string str)       { m_cFITSObject = str; }
    string      GetFITSObject(void)             { return m_cFITSObject;}
    void        SetFITSTelescope(string str)    { m_cFITSTelescope = str; }
    string      GetFITSTelescope(void)          { return m_cFITSTelescope;}
    void        SetApertureDiameter(double ap)  { m_dApertureDiameter = ap; }
    double      GetApertureDiameter(void)       { return m_dApertureDiameter; }
    void        SetAdditionalFITSKeys(string str) { m_cAdditionalFITSKeys = str; }
    string      GetAdditionalFITSKeys(void)     { return m_cAdditionalFITSKeys; }

    /* FITS file format utilities */
    SBIG_FILE_ERROR SaveFITS(const char *pFullPath);
    SBIG_FILE_ERROR History2FITS(fitsfile *fptr);
    SBIG_FILE_ERROR ReadFITSImage(const char *pFullPath);
#endif
};

#endif /* #ifndef _CSBIGIMG_ */

解决方法

添加包含文件链接库后,我收到此错误.这是因为lib是用非unicode构建的,我的应用程序是unicode.匹配他们修复它.

猜你在找的C&C++相关文章