编写TWAIN程序时,总是提示出错,如下:error C2039: “pImageInfo”: 不是“TW_IMAGEINFO”的成员
1>          f:\毕设\multicis\multicis\twain.h(423) : 参见“TW_IMAGEINFO”的声明
1>f:\毕设\multicis\multicis\prot.cpp(875): error C2232: “->TW_IMAGEINFO::BitsPerPixel”: 左操作数有“”类型,使用“.”
1>f:\毕设\multicis\multicis\prot.cpp(878): error C2059: 语法错误:“常量”
1>f:\毕设\multicis\multicis\prot.cpp(880): error C2039: “i”: 不是“TW_IMAGEINFO”的成员
1>          f:\毕设\multicis\multicis\twain.h(423) : 参见“TW_IMAGEINFO”的声明
1>f:\毕设\multicis\multicis\prot.cpp(880): error C2039: “i”: 不是“TW_IMAGEINFO”的成员其中pImageInfo 定义为 pTW_IMAGEINFO       pImageInfo;
请高手指教!!

解决方案 »

  1.   

    TW_IMAGEINFO这个结构咋定义的啊?
      

  2.   

    typedef struct {
       TW_FIX32   XResolution;
       TW_FIX32   YResolution;
       TW_INT32   ImageWidth;
       TW_INT32   ImageLength;
       TW_INT16   SamplesPerPixel;
       TW_INT16   BitsPerSample[8];
       TW_INT16   BitsPerPixel;
       TW_BOOL    Planar;
       TW_INT16   PixelType;
       TW_UINT16  Compression;
    } TW_IMAGEINFO,FAR*pTW_IMAGEINFO;
    这是定义,
    而我定义的是pTW_IMAGEINFO  pImageInfo;
      

  3.   

    我在VS2010中用的,在函数中用到,
    TW_UINT16 ImageInfoMsg (PTWMSG pTWMsg)
    {
    TW_UINT16           twRC = TWRC_SUCCESS;
    pTW_IMAGEINFO       pImageInfo;
    ......
    }
    其中ImageInfoMsg函数定义如下MAPPER ImageMap[] =
    {
    {DAT_IMAGEINFO,          ImageInfoMsg}, //设置所要传输图象的信息(比如大小、每象素比特数等)

    {0,                      NULL}
    };
    MAPPER定义如下
    typedef struct {
       TW_UINT16   ID;                            // Either the struct id or msg id
       TW_UINT16   (*pFunc)(PTWMSG pDcMsg);       // Pointer to fnt which processes msg
    } MAPPER, * PMAPPER;
      

  4.   

    我装的是vs2010,我把该该函数发给你吧,
    TW_UINT16 ImageInfoMsg (PTWMSG pTWMsg)
    {
    TW_UINT16           twRC = TWRC_SUCCESS;
    pTW_IMAGEINFO       pImageInfo;
    int                 i;
    int nTransWidth=0;
    int nTransHeight=0; int offset_X;
    int offset_Y; while(!bDibInfoReady)
    {
    Sleep(0);
    }
    int nWholeLineBytes=m_wndPreview->m_nScanDibLineBytes;
    int nDibHeight=m_wndPreview->nImageHeight;
    int nDibWidth=m_wndPreview->nImageWidth;
    if(m_wndPreview->ruler)
    {
    offset_X=m_pAfxpDlgScan->m_fDScanRegionX*m_pAfxpDlgScan->m_ScanXRes;
    offset_Y=m_pAfxpDlgScan->m_fDScanRegionY*m_pAfxpDlgScan->m_ScanYRes;
    }
    else
    {
    offset_X=m_pAfxpDlgScan->m_fDScanRegionX/2.54*m_pAfxpDlgScan->m_ScanXRes;
    offset_Y=m_pAfxpDlgScan->m_fDScanRegionY/2.54*m_pAfxpDlgScan->m_ScanYRes;
    } // typedef struct {
    // TW_FIX32   XResolution;      /* Resolution in the horizontal             */
    // TW_FIX32   YResolution;      /* Resolution in the vertical               */
    // TW_INT32   ImageWidth;       /* Columns in the image, -1 if unknown by DS*/
    // TW_INT32   ImageLength;      /* Rows in the image, -1 if unknown by DS   */
    // TW_INT16   SamplesPerPixel;  /* Number of samples per pixel, 3 for RGB   */
    // TW_INT16   BitsPerSample[8]; /* Number of bits for each sample           */
    // TW_INT16   BitsPerPixel;     /* Number of bits for each padded pixel     */
    // TW_BOOL    Planar;           /* True if Planar, False if chunky          */
    // TW_INT16   PixelType;        /* How to interp data; photo interp (TWPT_) */
    // TW_UINT16  Compression;      /* How the data is compressed (TWCP_xxxx)   */
    // } TW_IMAGEINFO, FAR * pTW_IMAGEINFO; if (DSState==STATE6)
    {
    switch (pTWMsg->MSG)
    {
    case MSG_GET: pImageInfo = (pTW_IMAGEINFO)pTWMsg->pData; //2010.9.9添加
    // BYTE* lpdata=pMainDlg->m_wndPreview.m_pScanDibBits;
    if(m_wndPreview->ruler)
    {
    nTransWidth=m_pAfxpDlgScan->m_fDScanRegionWidth*m_pAfxpDlgScan->m_ScanXRes;
    nTransHeight=m_pAfxpDlgScan->m_fDScanRegionHeight*m_pAfxpDlgScan->m_ScanYRes;
    }
    else
    {
    nTransWidth=m_pAfxpDlgScan->m_fDScanRegionWidth/2.54*m_pAfxpDlgScan->m_ScanXRes;
    nTransHeight=m_pAfxpDlgScan->m_fDScanRegionHeight/2.54*m_pAfxpDlgScan->m_ScanYRes;
    } if(nTransWidth>nDibWidth-offset_X)
    nTransWidth=nDibWidth-offset_X; if(offset_Y+nTransHeight>nDibHeight)
    nTransHeight=nDibHeight-offset_Y; pImageInfo->XResolution.Whole = m_pAfxpDlgScan->m_ScanXRes;//m_pScanner->m_nDpi;
    pImageInfo->YResolution.Whole = m_pAfxpDlgScan->m_ScanYRes;//m_pScanner->m_nDpi;
    pImageInfo->XResolution.Frac  = 0;
    pImageInfo->YResolution.Frac  = 0;

        pImageInfo->ImageWidth = nDibWidth;//pViewInfo->m_rcScanRect.Width();
    pImageInfo->ImageLength = nDibHeight;//pViewInfo->m_rcScanRect.Height();

    switch(m_pAfxpDlgScan->m_nColorMode)//扫描色彩模式:0-彩色;1-灰度;2-黑白二值
    {
    case 0:
    pImageInfo->SamplesPerPixel = 3;
    pImageInfo->BitsPerPixel    = 24;
    pImageInfo->Planar = FALSE;
    pImageInfo->PixelType = TWPT_RGB;
    pImageInfo->Compression = TWCP_NONE; for(i=0; i< 8; i++)
    {
    pImageInfo->BitsPerSample[i] = 0;
    }
    pImageInfo->BitsPerSample[0] = 8;
    pImageInfo->BitsPerSample[1] = 8;
    pImageInfo->BitsPerSample[2] = 8;
    break;
    case 1:
    pImageInfo->SamplesPerPixel = 1;
    pImageInfo->BitsPerPixel    = 8;
    pImageInfo->Planar = FALSE;
    pImageInfo->PixelType = TWPT_GRAY;
    pImageInfo->Compression = TWCP_NONE; for(i=0; i<8; i++)
    {
    pImageInfo->BitsPerSample[i] = 0;
    }
    pImageInfo->BitsPerSample[0] = 8;
    break;
    case 2:
    pImageInfo->SamplesPerPixel = 3;
    pImageInfo->BitsPerPixel    = 24;
    pImageInfo->Planar = FALSE;
    pImageInfo->PixelType = TWPT_RGB;
    pImageInfo->Compression = TWCP_NONE; for(i=0; i< 8; i++)
    {
    pImageInfo->BitsPerSample[i] = 0;
    }
    pImageInfo->BitsPerSample[0] = 8;
    pImageInfo->BitsPerSample[1] = 8;
    pImageInfo->BitsPerSample[2] = 8;
    break;
    default:
    pImageInfo->SamplesPerPixel = 3;
    pImageInfo->BitsPerPixel    = 24;
    pImageInfo->Planar = FALSE;
    pImageInfo->PixelType = TWPT_RGB;
    pImageInfo->Compression = TWCP_NONE; for(i=0; i< 8; i++)
    {
    pImageInfo->BitsPerSample[i] = 0;
    }
    pImageInfo->BitsPerSample[0] = 8;
    pImageInfo->BitsPerSample[1] = 8;
    pImageInfo->BitsPerSample[2] = 8;
    break; }//switch(pMainDlg->m_nColor)//扫描色彩模式:0-彩色;1-灰度;2-黑白二值 twRC = TWRC_SUCCESS;
    break; default:
    DSStatus.ConditionCode = TWCC_BADPROTOCOL;
    twRC = TWRC_FAILURE;
    DS_Error (E_IMAGEINFOMSG, DSStatus.ConditionCode);
    break;
    }//switch (pTWMsg->MSG)
    }//if (DSState==STATE6)
    else
    {
    DSStatus.ConditionCode = TWCC_SEQERROR;
    twRC = TWRC_FAILURE;
    DS_Error (E_IMAGEINFOMSG, DSStatus.ConditionCode);
    }
    return twRC;
    }
    当运行时,提示错误就如下:
     error C2059: 语法错误:“常量”
    1>f:\毕设\multicis\multicis\prot.cpp(874): error C2039: “pImageInfo”: 不是“TW_IMAGEINFO”的成员
    1>          f:\毕设\multicis\multicis\twain.h(423) : 参见“TW_IMAGEINFO”的声明
    1>f:\毕设\multicis\multicis\prot.cpp(874): error C2232: “->TW_IMAGEINFO::BitsPerPixel”: 左操作数有“”类型,使用“.”
    1>f:\毕设\multicis\multicis\prot.cpp(877): error C2059: 语法错误:“常量”
    1>f:\毕设\multicis\multicis\prot.cpp(879): error C2039: “i”: 不是“TW_IMAGEINFO”的成员
    1>          f:\毕设\multicis\multicis\twain.h(423) : 参见“TW_IMAGEINFO”的声明
    1>f:\毕设\multicis\multicis\prot.cpp(879): error C2039: “i”: 不是“TW_IMAGEINFO”的成员
    1>          f:\毕设\multicis\multicis\twain.h(423) : 参见“TW_IMAGEINFO”的声明
    1>f:\毕设\multicis\multicis\prot.cpp(879): error C2039: “i”: 不是“TW_IMAGEINFO”的成员
    1>          f:\毕设\multicis\multicis\twain.h(423) : 参见“TW_IMAGEINFO”的声明
    1>f:\毕设\multicis\multicis\prot.cpp(881): error C2039: “pImageInfo”: 不是“TW_IMAGEINFO”的成员
    1>          f:\毕设\multicis\multicis\twain.h(423) : 参见“TW_IMAGEINFO”的声明
    1>f:\毕设\multicis\multicis\prot.cpp(881): error C2059: 语法错误:“常量”
    1>f:\毕设\multicis\multicis\prot.cpp(883): error C2039: “pImageInfo”: 不是“TW_IMAGEINFO”的成员
    1>          f:\毕设\multicis\multicis\twain.h(423) : 参见“TW_IMAGEINFO”的声明
    1>f:\毕设\multicis\multicis\prot.cpp(883): error C2059: 语法错误:“常量”
    .......
      

  5.   

     当运行到pImageInfo->ImageWidth = nDibWidth;就提示出错,我怀疑和他本身的变量类型FAR * pTW_IMAGEINFO有关吧;pImageInfo定义是pTW_IMAGEINFO pImageInfo,而错误说“pImageInfo” 不是“TW_IMAGEINFO”的成员,TW_IMAGEINFO和FAR * pTW_IMAGEINFO是同一个结构体,
    typedef struct {
       TW_FIX32   XResolution;      /* Resolution in the horizontal             */
       TW_FIX32   YResolution;      /* Resolution in the vertical               */
       TW_INT32   ImageWidth;       /* Columns in the image, -1 if unknown by DS*/
       TW_INT32   ImageLength;      /* Rows in the image, -1 if unknown by DS   */
       TW_INT16   SamplesPerPixel;  /* Number of samples per pixel, 3 for RGB   */
       TW_INT16   BitsPerSample[8]; /* Number of bits for each sample           */
       TW_INT16   BitsPerPixel;     /* Number of bits for each padded pixel     */
       TW_BOOL    Planar;           /* True if Planar, False if chunky          */
       TW_INT16   PixelType;        /* How to interp data; photo interp (TWPT_) */
       TW_UINT16  Compression;      /* How the data is compressed (TWCP_xxxx)   */
    } TW_IMAGEINFO, FAR * pTW_IMAGEINFO;
      

  6.   

    问题解决了,我在其他文件中用define定义了常量,而常量名又与TWAIN文件中某些结构体中的成员名相同,导致运行出错,不过仍然谢谢你!