软件环境:
主 机:WinXP SP3/ VS2008/ MapXtreme2008
虚拟机:WinXP SP3/ VS2005/ MapXtreme2008
目的:
在虚拟机环境下,对 MapXtreme2008 做二次开发。
问题现象:
引用 MapInfo.CoreEngine 到项目中,编译无法通过,提示在"C:/Program Files/Common Files/MapInfo/MapXtreme/6.8.0/"目录中找不到下列文件
AllType.DLL
AppSelection.dll
AppUtil.dll
ChangeManager.dll
CommandProcessor.dll
Compiler.DLL
CoordSys.DLL
CustomProperties.dll
DAEngine.DLL
DBInfo.DLL
DBLayer.DLL
ExprPacket.dll
ExprPacketCreator.dll
FcnInfoServer.dll
Find.DLL
Geo.DLL
GeoObject.dll
GeoObjectProcess.dll
Geoset.DLL
GMLXlat.DLL
Legend.DLL
libspw_mi.dll
MapBasicInternalFcn.dll
MapBasicTranslator.dll
MapperAndLayout.dll
MIApp.DLL
MILexer.DLL
MIMetadata.dll
MILicensing.dll
MIOci.DLL
MIOdbc.DLL
MIRdb.DLL
MIRdbSpatial.dll
migdiplus.DLL
MIWindow.DLL
Program.DLL
Raster.DLL
Styles.DLL
TextFileReader.dll
Thematics.dll
Tokens.DLL
Tools.DLL
Utility.DLL
XmlUtil.DLL
试验过程:
首先怀疑 licence 问题,重装 N 遍后,确定不是。
改用 VS2008 开发环境,编译通过,于是对比两个开发环境的区别,最后发现 VS2008 使用 framework3.0 可以通过编译,使用 framework2.0 则不能。
由于 VS2005 固定使用framework2.0,没找到如何改为 framework3.0,所以最后决定用 VS2008 开发。
转机:
无意间发现 MapInfo 安装的示例程序能够在 VS2005 下正常编译,比较后发现:示例中添加的 DLL 引用其"复制本地=false",手动的则为"true"。再看 VS2008 在使用 framework2.0 与 3.0 时的区别也在于此。
结论:
使用 VS2005 开发 MapXtreme2008 时,将引用的 MapInfo 动态链接库改为"复制本地=false"。
结语:
VS2005 默认将引用的 DLL 全部设置为了"复制本地=true",导致对 MapXtreme 的开发项目不能通过编译,而 MapXtreme2008 的开发手册里也没有提到这一点,希望我的这次经历能帮你减少浪费的时间。