关于LPCSTR LPCTSTR const char*的问题
void CMyCapDoc::OnFileOpen()
{
CString filename;
// static char szFilter[]="BMP文件(*.bmp)|*.bmp||";
// char szFilter[]="BMP文件(*.bmp)|*.bmp||";
CFileDialog dlg(TRUE,_T("bmp"),NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("BMP文件(*.bmp)|*.bmp||"));
if(dlg.DoModal()==IDOK)
{
filename=dlg.GetPathName();
if(!(m_dib.LoadBmp(filename)))
return;
UpdateAllViews(NULL);
}
}
其中修改前,参数5用szFileter[]来代替,若是把注释掉行的字符加上_T(),提示找不到LszFilter。去掉static会出现新的错误,
干脆一了百了,直接把字符串写进参数,不要中间过渡的szFilter
int CDIB::SaveBmp(LPCTSTR filename)
{
BITMAPFILEHEADER hdr;
//打开文件
CFile file(filename,CFile::modeWrite|CFile::modeCreate);
//文件头
hdr.bfType = ((WORD)'M'<<8) + 'B';
LPBITMAPINFO pbi = GetBitmapInfo();
PBITMAPINFOHEADER pbih = (PBITMAPINFOHEADER) pbi;
hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + pbih->biSize + pbih->biClrUsed * sizeof(RGBQUAD) + pbih->biSizeImage);
hdr.bfReserved1 = 0;
hdr.bfReserved2 = 0;
// Compute the offset to the array of color indices.
hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + pbih->biSize + pbih->biClrUsed * sizeof (RGBQUAD);
//写入文件头
file.Write((LPVOID) &hdr, sizeof(BITMAPFILEHEADER));
//写入信息头
file.Write((LPVOID) pbih, sizeof(BITMAPINFOHEADER)
+ pbih->biClrUsed * sizeof (RGBQUAD));
// Copy the array of color indices into the .BMP file.
//写入数据
int nTotal = pbih->biSizeImage;
LPVOID lpBits = GetBits();
file.Write(lpBits, nTotal);
//关闭文件
file.Close();
delete pbi;
return 1;
}
这段代码里直接修改了参数类型为LPCTSTR,原来为LPCSTR,行5的 CFile file()会出错。当然修改完了还得到头文件里把声明也修改了。
浙公网安备 33010602011771号