编写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> 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;
请高手指教!!
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;
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;
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: 语法错误:“常量”
.......
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;