VS2008 + MAPX5.0 创建永久图层问题

hanxwinner 2012-11-03 06:47:30
下面代码红色标注部分为出问题地方,哪位大侠帮我看看有什么时候问题!
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;
}
...全文
295 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanxwinner 2012-11-04
  • 打赏
  • 举报
回复
自己顶起...
hanxwinner 2012-11-04
  • 打赏
  • 举报
回复
自己找到原因了! Flds.AddStringField(_T("TDD LTE_NCells"), 254);//不能出现这些有空格的情况!


1.功能概述
(1)初始化打开网页,加载书签
(2)双击书签,地图跳转到选择的书签
(3)添加书签
(4)删除书签
2.基本思路
(1)数据库中建表BookMark(ID、Name、MapX、MapY、Zoom)
(2)书签界面
     

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧