登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Stupid Striving

StupidMe

 
 
 

日志

 
 

ArcEngine添加库在VC6.0和VC2005中的区别  

2010-05-22 18:15:11|  分类: 开始我的奋斗人生 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

我之前用VC6.0进行开发,添加库的时候,以下的往stdafx.h中添加方式是可以的:

#include <afxcmn.h>   // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT

//以下是添加库的代码

#pragma warning(push)
#pragma warning(disable : 4192) /* Ignore warnings for types that are duplicated in win32 header files */
#pragma warning(disable : 4146) /* Ignore warnings for use of minus on unsigned types */

#import "\Program Files\ArcGIS\com\esriSystem.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids, exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE")
#import "\Program Files\ArcGIS\com\esriSystemUI.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\com\esriGeometry.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\com\esriDisplay.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\com\esriOutput.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\com\esriGeoDatabase.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\com\esriCarto.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\com\esriControls.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids

#pragma warning(pop)

但是要是把以上的代码直接在VC2005中的stdafx.h中添加的时候,编译是不能通过的。错误是有很多接口重定义。解决问题是,逐条添加库,添加一条就编译一次,看有没有重定义的接口或者其他变量,有则在import的exclude属性中将其排除。修改后,如下:

#pragma warning(push)
#pragma warning(disable : 4192) /* Ignore warnings for types that are duplicated in win32 header files */
#pragma warning(disable : 4146) /* Ignore warnings for use of minus on unsigned types */
#import "d:\Program Files\ArcGIS\com\esriSystem.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids, exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE")
#import "d:\Program Files\ArcGIS\com\esriSystemUI.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids, exclude ("ICommand", "IProgressDialog")
#import "d:\Program Files\ArcGIS\com\esriGeometry.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "d:\Program Files\ArcGIS\com\esriDisplay.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "d:\Program Files\ArcGIS\com\esriOutput.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "d:\Program Files\ArcGIS\com\esriGeoDatabase.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids, exclude ("IRow", "ICursor")
#import "d:\Program Files\ArcGIS\com\esriCarto.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids, exclude ("ITableDefinition", "UINT_PTR")
#import "d:\Program Files\ArcGIS\com\esriControls.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#pragma warning(pop)

用这样的添加库的方法一段时间后,又发现了问题。一些接口的方法在这种添加库的方法下,是没有的。如:IFeature类中的Store()方法,这种情况就没有。但是在第一种方法在VC6.0中的时候,那些方法是存在的。原因估计是我们在添加esriGeoDataBase库的时候排除了IRow类型,而IFeature是继承与IRow的,所以其中一些方法没有了。为了解决这个问题,就要给那些发生冲突的库重新定义命名空间,把no_namespace改为rename_namespace("newname")。修改后代码如下:

#pragma warning(push)
#pragma warning(disable : 4192) /* Ignore warnings for types that are duplicated in win32 header files */
#pragma warning(disable : 4146) /* Ignore warnings for use of minus on unsigned types */
#import "d:\Program Files\ArcGIS\com\esriSystem.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids, exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE")
#import "d:\Program Files\ArcGIS\com\esriSystemUI.olb" raw_interfaces_only, raw_native_types, rename_namespace ("esriSystemUI"), named_guids//, exclude ("ICommand", "IProgressDialog")
#import "d:\Program Files\ArcGIS\com\esriGeometry.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "d:\Program Files\ArcGIS\com\esriGeoDatabase.olb" raw_interfaces_only, raw_native_types, rename_namespace ("esriGeoDatabase"), named_guids//, exclude ("IRow", "ICursor")

#import "d:\Program Files\ArcGIS\com\esriDisplay.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "d:\Program Files\ArcGIS\com\esriOutput.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids

#import "d:\Program Files\ArcGIS\com\esriCarto.olb" raw_interfaces_only, raw_native_types, rename_namespace ("esriCarto"), named_guids, exclude (/*"ITableDefinition",*/ "UINT_PTR")
#import "d:\Program Files\ArcGIS\com\esriControls.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#pragma warning(pop)

但其中还是有些变量要排除的,如esriCarto中的UINT_PTR。这样之前没有的方法就找回来了。

至于为什么VC和VS中添加库有这么多的不同,我不了解。只能遇到问题试着解决问题,暂时以最后一种方法添加库还没有遇到别个问题,有问题再更新。

  评论这张
 
阅读(845)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018