lis214
路人甲
路人甲
  • 注册日期2011-12-22
  • 发帖数3
  • QQ
  • 铜币109枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1897回复:1

VC++ IRow接口问题

楼主#
更多 发布于:2012-03-03 16:52
<font face="Verdana">#import "C:\program files\arcgis\com\esriGeoDatabase.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids, rename("IRow","IESRIRow"), rename("ICursor", "esriICursor"),rename("IRelationship","esriIRelationship")</font>  引入库的时候把 IRow因为重名给改掉了,但是   程序里面  引用的时候 报错   IESRIRowPtr  ipRow;  <font face="Verdana"> ipRowFeatidobj->get_Row(;ipRow);  <font face="Verdana">“IRowIdentifyObject::get_Row”: 不能将参数 1 从“esriIIRow **”转换为“IRow **”</font>;你们有人遇到过吗,该怎么解决呢?</font>
喜欢0 评分0
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
1楼#
发布于:2012-03-07 11:47
    AE是ESRI的旗舰产品ArcGIS的一个著名开发包。这次开发工具采用Visual C++2005。 首先安装AE 9.3中Runtime和SDK for VC++,如下图所示:<br/><img title="VC+AE开发遇到的问题及其解决之道" name="image_operate_8791312299759428" alt="VC+AE开发遇到的问题及其解决之道" src="http://s10.sinaimg.cn/middle/7822ce75ta98797e979e9;690" width="690" height="541" real_src="http://s10.sinaimg.cn/middle/7822ce75ta98797e979e9;690"/><br/><br/> <br/>AE本质上是一个COM库。使用COM库的一个常见问题是类型和系统的一个COM库重定义以及由于版本原因低版本的COM库不同组件之间的互相冲突。所以在AE开发时常会碰到以下编译错误:<br/>错误 8 error C3121: 无法更改“IRow”类的GUID  e:\学习\c#\try again\try again\debug\esrigeodatabase.tlh 96<br/>错误 9 error C2011: “IRow”: “struct”类型重定义 e:\学习\c#\try again\try again\debug\esrigeodatabase.tlh 16693<br/>错误 10 error C2011: “ICursor”: “struct”类型重定义 e:\学习\c#\try again\try again\debug\esrigeodatabase.tlh 16710<br/>错误 11 error C2504: “IRow”: 未定义基类 e:\学习\c#\try again\try again\debug\esrigeodatabase.tlh 17997<br/>错误 12 error C3121: 无法更改“ITableDefinition”类的 GUID  e:\学习\c#\try again\try again\debug\esricarto.tlh 636<br/>错误 13 error C2371: “UINT_PTR”: 重定义;不同的基类型 e:\学习\c#\try again\try again\debug\esricarto.tlh 1733<br/>错误 14 error C2011: “ITableDefinition”: “struct”类型重定义 e:\学习\c#\try again\try again\debug\esricarto.tlh 9865<br/>错误 15 error C2011: “esriControlsMousePointer”: “enum”类型重定义 e:\学习\c#\try again\try again\debug\toolbarcontrol.tlh 107<br/>错误 16 error C2011: “esriControlsDragDropEffect”: “enum”类型重定义 e:\学习\c#\try again\try again\debug\toolbarcontrol.tlh 144<br/>错误 17 error C2011: “esriControlsDropAction”: “enum”类型重定义 e:\学习\c#\try again\try again\debug\toolbarcontrol.tlh 153<br/>错误 18 error C2011: “esriControlsAppearance”: “enum”类型重定义 e:\学习\c#\try again\try again\debug\toolbarcontrol.tlh 162<br/>错误 19 error C2011: “esriControlsBorderStyle”: “enum”类型重定义 e:\学习\c#\try again\try again\debug\toolbarcontrol.tlh 169<br/> <br/>IRow接口我估计是个ADO库的接口有冲突。解决这类错误的原则是:<br/>如果和系统组件冲突的话就采用rename关键字进行重命名,如果是不同组件之间的接口冲突的话就用exclude关键字进行排除。<br/> <br/>#pragma warning(push)<br/>#pragma warning(disable: 4192)<br/>#pragma warning(disable: 4146)<br/>#import "D:\Program Files\ArcGIS\com\esriSystem.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE")<br/>#import "D:\Program Files\ArcGIS\com\esriSystemUI.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,  rename("ICommand", "esriICommand"), rename("IProgressDialog", "esriIProgressDialog")<br/>#import "D:\Program Files\ArcGIS\bin\ToolbarControl.ocx" raw_interfaces_only raw_native_types no_namespace named_guids<br/>#import "D:\Program Files\ArcGIS\bin\TOCControl.ocx" raw_interfaces_only, raw_native_types,no_namespace,named_guids,exclude("esriControlsMousePointer","esriControlsDragDropEffect","esriControlsDropAction","esriControlsAppearance","esriControlsBorderStyle")<br/> <br/>#import "D:\Program Files\ArcGIS\com\esriGeometry.olb" raw_interfaces_only raw_native_types no_namespace named_guids<br/>#import "D:\Program Files\ArcGIS\com\esriDisplay.olb" raw_interfaces_only raw_native_types no_namespace named_guids<br/> <br/>#import "D:\Program Files\ArcGIS\com\esriGeoDatabase.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,rename("IRow", "esriIRow"), rename("ICursor", "esriICursor")<br/>#import "D:\Program Files\ArcGIS\com\esri3DAnalyst.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE")<br/>#import "D:\Program Files\ArcGIS\bin\SceneControl.ocx" raw_interfaces_only raw_native_types no_namespace named_guids<br/>#import "D:\Program Files\ArcGIS\com\esriOutput.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE")<br/> <br/>#import "D:\Program Files\ArcGIS\com\esriNetworkAnalysis.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE", "IStatusBar")<br/>#import "D:\Program Files\ArcGIS\com\esriGeoAnalyst.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE", "IStatusBar")<br/> <br/>#import "D:\Program Files\ArcGIS\com\esriCarto.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids, exclude("UINT_PTR"), rename("ITableDefinition", "esriITableDefinition")<br/> <br/>#import "D:\Program Files\ArcGIS\com\esriSpatialAnalyst.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE", "IStatusBar")<br/> <br/>#import "D:\Program Files\ArcGIS\com\esriDataSourcesFile.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")<br/>#import "D:\Program Files\ArcGIS\com\esriDataSourcesGDB.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")<br/>#import "D:\Program Files\ArcGIS\com\esriDataSourcesRaster.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")<br/>#pragma warning(pop)<br/> <br/>    另外在应用系统启动时常会出现以下提示:<br/>“Warning: This application has not been initialized with an ESRI license and will not function correctly. ”,如下图:<br/><img title="VC+AE开发遇到的问题及其解决之道" name="image_operate_86841312299800443" alt="VC+AE开发遇到的问题及其解决之道" src="http://s4.sinaimg.cn/middle/7822ce75ta9879a0a8793;690" width="690" height="119" real_src="http://s4.sinaimg.cn/middle/7822ce75ta9879a0a8793;690"/><br/><br/>这时只需在BOOL C***App::InitInstance()函数加入下面代码:<br/>    IAoInitializePtr paoinitialize(CLSID_AoInitialize);<br/>    esriLicenseStatus el = esriLicenseAvailable;<br/>    paoinitialize->Initialize(esriLicenseProductCodeEngine,;el);<br/> <br/> <br/><br/>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部