qifefe
路人甲
路人甲
  • 注册日期2006-11-29
  • 发帖数1
  • QQ
  • 铜币115枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1252回复:1

我也来说说CreateFeatureClass出错的问题

楼主#
更多 发布于:2008-03-24 14:30
平台:winXP(SP2)<BR>编译器:VC6(SP6)+AE9.2(许可全)<BR><FONT face="宋体 "><FONT size=5>该程序参照《</FONT></FONT><FONT style="FONT-SIZE: 14pt"><FONT face="Times New Roman ">ArcGIS</FONT></FONT><FONT face="宋体 "><FONT style="FONT-SIZE: 14pt">开发宝典-从入门到精通》编写(目录中的</FONT></FONT><FONT style="FONT-SIZE: 14pt"><FONT face="Times New Roman ">7.4.2</FONT></FONT><FONT face="宋体 "><FONT style="FONT-SIZE: 14pt">),你可参见这部分内容。</FONT></FONT><BR><BR>部分代码如下:<BR>......<BR>BOOL CDataOperator::AddHospitalLyr()<BR>{<BR>if(NULL == m_ipMap) return FALSE;<BR>BOOL bRes = FALSE;<BR>//创建MapComposer对象<BR>CString strHosName;<BR>strHosName.LoadString(ID_SIMMAP_HOSPITALNAME);<BR>CMapComposer MapComp;<BR>MapComp.m_ipMap = m_ipMap;<BR>ILayerPtr ipLyr = MapComp.GetLyrByName(strHosName);<BR>if(NULL == ipLyr)<BR>{<BR>  //创建Access工作空间<BR>  //注意:Location参数不必包含结尾的'\';Name不应包含扩展名.mdb<BR><BR>  ///特征工作空间接口<BR>  CString strMDBName;<BR>  strMDBName.LoadString(ID_SIMMAP_MDBPATH);<BR>  IWorkspacePtr ipWs = OpenPGD(strMDBName);<BR>  IFeatureClassPtr ipFeatCls = OpenPGDFeatCls(ipWs, strHosName);<BR>  if(NULL == ipFeatCls)<BR>  {<BR>   ipFeatCls = CreateHospitalFC();<BR>  }<BR>  bRes = AddFC2Map(ipFeatCls, strHosName);<BR>  if(!bRes) return FALSE;<BR>}<BR>return TRUE;<BR>}<BR><BR>IFeatureClassPtr CDataOperator::CreateHospitalFC()<BR>{<BR>if(NULL == m_ipMap) return NULL;<BR>HRESULT hr;<BR>CString strMDBName;<BR>strMDBName.LoadString(ID_SIMMAP_MDBPATH);<BR>IWorkspacePtr ipWs = OpenPGD(strMDBName);<BR>IFieldsPtr ipFields(CLSID_Fields);<BR>IFieldsEditPtr ipFieldEdit(ipFields);<BR>IFieldEditPtr ipField;<BR>hr = ipFieldEdit->put_FieldCount(3);<BR>hr = ipField.CreateInstance(CLSID_Field);<BR>hr = ipField->put_Name((_bstr_t)"ObjectID");<BR>hr = ipField->put_AliasName((_bstr_t)"FID");<BR>hr = ipField->put_Type(esriFieldTypeOID);<BR>hr = ipFieldEdit->putref_Field(0, ipField);<BR>hr = ipField.CreateInstance(CLSID_Field);<BR>hr = ipField->put_Name((_bstr_t)"NAME");<BR>hr = ipField->put_AliasName((_bstr_t)"Name");<BR>hr = ipField->put_Type(esriFieldTypeString);<BR>hr = ipFieldEdit->putref_Field(1, ipField);<BR><BR>IGeometryDefEditPtr ipGeoDef(CLSID_GeometryDef);<BR>ISpatialReferencePtr ipSR;<BR>hr = m_ipMap->get_SpatialReference(;ipSR);<BR>hr = ipGeoDef->putref_SpatialReference(ipSR);<BR>hr = ipGeoDef->put_GeometryType(esriGeometryPoint);<BR>hr = ipField.CreateInstance(CLSID_Field);<BR>hr = ipField->put_Name((_bstr_t)"Shape");<BR>hr = ipField->put_AliasName((_bstr_t)"shape");<BR>hr = ipField->put_Type(esriFieldTypeGeometry);<BR>hr = ipField->putref_GeometryDef(ipGeoDef);<BR>hr = ipFieldEdit->putref_Field(2, ipField);<BR><BR>IFeatureClassPtr ipFeatCls = NULL;<BR>CString strHosName;<BR>strHosName.LoadString(ID_SIMMAP_HOSPITALNAME);<BR>ipFeatCls = CreateFC(ipWs, strHosName, ipFields, esriFTSimple);<BR>return ipFeatCls;<BR>}<BR><BR>IFeatureClassPtr CDataOperator::CreateFC(IWorkspacePtr ipWs, CString strFCName, IFieldsPtr ipFields, esriFeatureType eFT)<BR>{<BR>if(NULL == ipWs) return NULL;<BR>HRESULT hr;<BR>IFeatureClassPtr ipFeatCls = NULL;<BR>ipFeatCls = OpenPGDFeatCls(ipWs, strFCName);<BR>if(NULL != ipFeatCls) return ipFeatCls;<BR>BSTR bsShpFldName;<BR>IFieldPtr ipFd;<BR>esriFieldType eType;<BR>long lCnt, l;<BR>hr = ipFields->get_FieldCount(;lCnt);<BR>for(l = 0; l < lCnt; l++)<BR>{<BR>  hr = ipFields->get_Field(l, ;ipFd);<BR>  hr = ipFd->get_Type(;eType);<BR>  if(esriFieldTypeGeometry == eType)<BR>  {<BR>   ipFd->get_Name(;bsShpFldName);<BR>   break;<BR>  }<BR>}<BR>if(l == lCnt) return NULL;<BR>IFeatureWorkspacePtr ipFeatWs(ipWs);<BR>hr = ipFeatWs->CreateFeatureClass((_bstr_t)strFCName, ipFields, NULL, NULL, eFT, bsShpFldName, (_bstr_t)"", ;ipFeatCls);<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~跟到这一步出错.即会弹出CreateFeatureClass Fail!"的对话框.编译器显示pFeatCls为NULL<BR>if( FAILED(hr) )  <BR>{<BR>  AfxMessageBox("CreateFeatureClass Fail!", MB_OK, 0);<BR>  return NULL;<BR>}<BR>return ipFeatCls;<BR>}<BR>......<BR><BR>请各位大虾帮忙看看,解解惑,小弟拜谢了!
喜欢0 评分0
langyan8973
路人甲
路人甲
  • 注册日期2006-07-12
  • 发帖数90
  • QQ
  • 铜币456枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2008-06-11 14:39
<P>我原来遇到类似的问题,主要原因是一些路径信息中含有中文,改成全部英文字符串的路径就好了。</P>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部