VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 20|回复: 11

请高手给看看下面的代码有什么问题,MapX5.0+VC

[复制链接]

1

主题

5

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2020-1-27 00:00:01 | 显示全部楼层 |阅读模式
void drawNewFeature(
                                         const CString &csLayerName,
                                         double dblLng,
                                         double dblLat,
                                         const CString &csName,
                                         const CString &csLevel,
                                         const CString &csTime
                                         )
{
        CMapX                *m_mapx;
        CMapXStyle        pStyle;

        pStyle.CreateDispatch(pStyle.GetClsid());
        pStyle.SetSymbolType(miSymbolTypeVector);
        pStyle.SetSymbolCharacter(34);
        pStyle.SetSymbolVectorSize(16);
        pStyle.SetSymbolVectorColor(miColorRed);
       
        CMapXLayer  pLayer;
        pLayer = m_mapx->GetLayers().Item(csLayerName);
       
        pLayer.BeginAccess(miAccessReadWrite);
       
        {
                m_mapx->SetAutoRedraw(FALSE);
                pLayer.SetEditable(TRUE);
               
                CMapXFeature                pFeature;
                CMapXPoint                        pPoint;
                CMapXFeatureFactory pFeatureFactory;

                pFeatureFactory = m_mapx->GetFeatureFactory();
                pFeature.CreateDispatch(pFeature.GetClsid());
                pPoint.CreateDispatch(pPoint.GetClsid());
               
                pPoint.Set(dblLng,dblLat);
               
                VARIANT                vtPoint;
                VARIANT                vtStyle;
               
                vtPoint.vt = VT_DISPATCH;
                vtPoint.pdispVal = pPoint.m_lpDispatch;
               
                vtStyle.vt = VT_DISPATCH;
                vtStyle.pdispVal = pStyle.m_lpDispatch;

                pFeature = pFeatureFactory.CreateSymbol(vtPoint, vtStyle);
                pLayer.AddFeature(pFeature.m_lpDispatch);

                pLayer.Refresh();

                pLayer.SetKeyField("name");
                pFeature.SetKeyValue(csName);
                //在这里出错了
                pFeature.Update();

                pLayer.SetKeyField("level");
                pFeature.SetKeyValue(csLevel);
                pFeature.Update();

                pLayer.SetKeyField("time");
                pFeature.SetKeyValue(csTime);
                pFeature.Update();

                m_mapx->ZoomTo(1000,pFeature.GetCenterX(),pFeature.GetCenterY());
               
                m_mapx->SetAutoRedraw(TRUE);
                pLayer.SetEditable(FALSE);
               
                m_mapx->Refresh();
        }

        pLayer.EndAccess();  
}
回复

使用道具 举报

0

主题

2

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2020-6-14 16:15:01 | 显示全部楼层
报什么错误?
把pLayer.AddFeature(pFeature.m_lpDispatch);

pLayer.Refresh();

pLayer.SetKeyField("name");
移到
pFeature.Update(); 后边试试
回复

使用道具 举报

1

主题

5

帖子

6

积分

新手上路

Rank: 1

积分
6
 楼主| 发表于 2020-8-4 23:45:02 | 显示全部楼层
首先修改一个错误:
pLayer.AddFeature(pFeature.m_lpDispatch);
修改为:
pFeature = pLayer.AddFeature(pFeature.m_lpDispatch);

我是在线程里面使用,不知道为什么会出问题。问题是这样的,有时候可以顺利执行这个函数几十次然后会出问题。有时候第一次就会报错。报错内容是:0xC0000005:   Access   Violation。
我现在纳闷的是我也没有检查到哪里有指针用错误的情况啊。
请大家帮忙。
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2020-8-7 21:15:01 | 显示全部楼层
最好是能出问题的小源程序代码,调试方便,问题也直观,而且最好带数据(80%问题都是数据引起的)这么复杂的代码,一行一行看多浪费时间啊,又不是又编译器的脑袋
回复

使用道具 举报

1

主题

5

帖子

6

积分

新手上路

Rank: 1

积分
6
 楼主| 发表于 2020-8-10 21:00:01 | 显示全部楼层
感谢楼上,但是我想我没有必要把所有代码和数据都放上来,因为我的问题已经描述清楚了。
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2020-8-15 23:30:01 | 显示全部楼层
添加图元信息好像不能这么添加, 用KeyField只能添加单个属性。
要添加多个属性好像要用CMapXDataset。楼主找一下,具体的我不太清楚!
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2020-8-16 16:00:01 | 显示全部楼层
在线程里面处理好像有问题吧
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2020-8-18 21:15:01 | 显示全部楼层
Mapx好像是不支持多线程的.搂主的主线程使用了Mapx没有啊,如果使用了,可能是这个问题.
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2020-8-19 14:45:01 | 显示全部楼层
支持
回复

使用道具 举报

1

主题

5

帖子

6

积分

新手上路

Rank: 1

积分
6
 楼主| 发表于 2020-8-20 23:15:01 | 显示全部楼层
首先我要感谢大家对这个问题的关注。
通过大家的提示,我基本上知道自己的问题了。
好像就是MapX关于多线程的问题。
我想首先考虑一下43471486 的建议,然后不行就听取饭抄蛋 和jy666666 ( ) 的建议,修理线程。我想在主线程的timer中处理应该可以吧。
谢谢大家,希望大家继续给出建议。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2020|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表