按照一个完整的GDAL程序编写了一个练习。但在列子中
BOOL CtextDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
………
DataSet = (GDALDataset*)GDALOpen(lpszPathName,GA_ReadOnly);
………
}
编译可以通过。但自己编写的就会报告:
error C2664: “GDALOpen”: 不能将参数 1 从“LPCTSTR”转换为“const char *” f:\wzx\gdal_text\text-2\text\textdoc.cpp尝试把类型改为 const char *后编译可通过。。但显示tif图像。
在例题中更改后结果相同。所以该段代码必须为 LPCTSTR 类型。现在还没搞明白到底是怎么回事。
但在上一次的练习中这个问题可以编译通过。

解决方案 »

  1.   

    需要注意的是pszFilename并不一定对应一个 实际的文件名(当然也可以就是一个文件名)。它的具体解释由相应的驱动程序负责。 它可能是一个URL,或者是文件名以后后面带有许多用于控制打开方式的参数。通常建议, 不要在打开文件的选择对话框中对文件的类型做太多的限制。
    我没有明白你说的什么意思
      

  2.   

    想用gdal打开一个tif格式的灰度图。BOOL CtextDoc::OnOpenDocument(LPCTSTR lpszPathName)
    {
    GDALDataset * DataSet; 
    GDALAllRegister();
    DataSet = (GDALDataset *)GDALOpen(lpszPathName,GA_Update);
    GDALRasterBand **pBand;
    m_Bands = DataSet->GetRasterCount();
    pBand = new GDALRasterBand *[m_Bands];
    for (int i = 0; i < m_Bands; i++)
    {
    pBand[i] = DataSet->GetRasterBand(i+1);
    }
    CDlgBands dlg;
    if (dlg.m_BandsType ==0)
    {
    BandsType = dlg.m_BandsType;
    BdCGray = dlg.BdChoiceGray;
    if (pBand[BdCGray] == NULL)
    {
    return 0;
    }
    nXsize = pBand[BdCGray]->GetXSize();
    nYsize = pBand[BdCGray]->GetYSize();
    opBandBlock_Gray = (BYTE *)CPLMalloc(sizeof(BYTE)*(nXsize*nYsize));
    pBand[BdCGray]->RasterIO(GF_Read,0,0,nXsize,nYsize,opBandBlock_Gray,
    nXsize,nYsize,pBand[BdCGray]->GetRasterDataType(),0,0);
    }
    UpdateAllViews(NULL);
    delete DataSet;
    return TRUE;
    }
      

  3.   

    代码应该没什么问题。。相同的代码  在 A项目中可以正常编译通过并且打开项目。。但在B项目中就会报错。。
    error C2664: “GDALOpen”: 不能将参数 1 从“LPCTSTR”转换为“const char *” f:\wzx\gdal_text\text-2\text\textdoc.cpp
    不知道怎么能解决
      

  4.   

    在B项目中就没有调用OnOpenDocument
      

  5.   


    另听他扯蛋,这是你的工程的字符集是UNICODE引起的问题。改成多字节集就好了
      

  6.   

    各位大侠,想请教个问题,DataSet = (GDALDataset *)GDALOpen(lpszPathName,GA_Update);
    delete DataSet;会不会报错,为什么我用GA_Update就会报错??
      

  7.   


         这里的DataSet不能delete吧,又不是你new出来的。