VS2008 + MAPX5.0 创建永久图层问题
下面代码红色标注部分为出问题地方,哪位大侠帮我看看有什么时候问题!
CMapXFields A::CreateFields()
{
//MapXLib::CMapXFieldsPtr Flds(__uuidof(MapXLib::CMapXFields));
//MapXLib::CMapXFields *Flds = NULL;
//CoCreateInstance(__uuidof(MapXLib::CMapXFields), NULL, CLSCTX_INPROC_SERVER, __uuidof(MapXLib::CMapXFields), (void **) Flds);
CMapXFields Flds;
Flds.CreateDispatch(Flds.GetClsid());
Flds.AddIntegerField(_T("ID"));
Flds.AddFloatField(_T("Longitude"));
Flds.AddFloatField(_T("Latitude"));
Flds.AddStringField(_T("CellName"), 40);
//Flds->AddStringField((LPBSTR)("CellNo"), 40, vtMissing);
Flds.AddIntegerField(_T("MCC"));
Flds.AddIntegerField(_T("MNC"));
Flds.AddIntegerField(_T("EnbId"));
Flds.AddIntegerField(_T("CellId"));
Flds.AddIntegerField(_T("PCI"));
Flds.AddIntegerField(_T("TAC"));
Flds.AddIntegerField(_T("Channel"));
Flds.AddFloatField(_T("ANT_Height"));
Flds.AddFloatField(_T("BeamWidth"));
Flds.AddIntegerField(_T("Azimuth"));
Flds.AddIntegerField(_T("Tilt"), FALSE);
Flds.AddLogicalField(_T("Indoor"));
Flds.AddStringField(_T("TDD LTE_NCells"), 254);
Flds.AddStringField(_T("OtherNCells"), 254);
return Flds;
}
//这里传进来的Flds为上面方法创建并传进来
CMapXLayer A::CreateNewTableLayer(CMapXFields& Flds, CMapXRowValues *RwVl)
{
//MapXLib::CMapXLayerInfoPtr LyrInfo(__uuidof(MapXLib::CMapXLayerInfo));
CMapXLayerInfo LyrInfo;
LyrInfo.CreateDispatch(LyrInfo.GetClsid());
//LyrInfo->Type = MapXLib::miLayerInfoTypeNewTable;
LyrInfo.SetType(miLayerInfoTypeNewTable);
std::string str(m_FilePath + m_LayerName + ".tab");//std::string m_FilePath, m_LayerName为类的数据成员
COleVariant vStr;
vStr.vt = VT_BSTR;
vStr.bstrVal = _bstr_t(str.c_str());
LyrInfo.AddParameter(_T("FileSpec"), vStr);
COleVariant vLyrName;
vLyrName.vt = VT_BSTR;
vLyrName.bstrVal = _bstr_t(m_LayerName.c_str());
LyrInfo.AddParameter(_T("Name"), vLyrName);
COleVariant vFlds;
vFlds.vt = VT_DISPATCH;
vFlds.pdispVal = Flds.m_lpDispatch;
vFlds.pdispVal->AddRef();
LyrInfo.AddParameter(_T("Fields"), vFlds);
COleVariant vInt;
vInt.vt = VT_I4;
vInt.intVal = 1;
LyrInfo.AddParameter(_T("OverwriteFile"), vInt);
//MapXLib::CMapXLayerPtr Layer;
CMapXLayer Lyr;
Lyr = m_Map->GetLayers().Add(LyrInfo.m_lpDispatch); //运行到这一句弹出异常错误,没有提示具体错误问题!
//MapXLib::CMapXDatasetPtr Dtst;
CMapXDataset Dtst;
COleVariant vLayer;
vLayer.vt = VT_DISPATCH;
vLayer.pdispVal = Lyr;
vLayer.pdispVal->AddRef();
Dtst = m_Map->GetDatasets().Add(miDataSetLayer, vLayer, (LPCTSTR)Lyr.GetName());
//RwVl = Dtst->RowValues[0];
*RwVl = Dtst.GetRowValues(0);
return Lyr;
}