将VS2005的MDL项目升级到VS2010

近日更换了新电脑,安装的是Windows7 64Bit+MSV8iSS2+VS2010。于是需要将原来VS2005下面的项目拿到VS2010下编译,结果遇到问题。解决如下:
①下载附件中的VCVarsQueryRegitry2010.rar解压后放到...\mdl\include目录下;
②修改你的MKE文件,在首行加上BUILD_USING_VS2010
③在VS2010中打开pointcloud.h文件,随便修改一下再复原,保存。(为了和简体中文代码页配合,该步骤只有在项目不是Unicode时需要)

然后一切OKay了!
已邀请:

MSFans - IT难,70后,ms发烧友,高烧未退。

赞同来自:

本帖最后由 MSFans 于 2010-8-19 20:49 编辑

嘿嘿,我也是这么干的,但运行时有问题,别人的机子上很多都是没有10.0的运行时,所以…………

MicroStation迷

赞同来自:

谢谢提醒。不过VS2010支持不同的PlatformToolSet(内置V90和V100),所以,经过适当配置后可以用VS2010生成依赖于各个运行时版本的DLL。详见如下链接:
http://www.objectarx.net/porta ... %3D14

MSFans - IT难,70后,ms发烧友,高烧未退。

赞同来自:

**回复 http://www.bentleybbs.com/bbs/ ... D3514 _MicroStation迷_ **

超赞!!

geotri2

赞同来自:

本帖最后由 geotri2 于 2012-1-7 12:59 编辑

我没有安装VS2005,只装VS2010,按本方法,可以生成DLL,但在生成后事件中调用Bmake中,不能生成MA,错误如下:
E:\MyProgram\MDL>bmake MyApp
Bentley Systems Make Utility. Version 08.11.07.03, Jul 1 2009
Sat Jan 07 12:51:26 2012
PolicyFile = C:\PROGRA~2\BENTLE~1.209\MICROS~1\mdl\include\AssertPublicMicroSta
tionPolicy.mki
BMAKE: Error - Could not determine a value for VS2010_FSHARPINSTALLDIR. Expected
registry entries are not present for BUILD_USING_VS2010. Are you sure the tools
et is installed?
BMAKE: call trace
line: 96, C:\PROGRA~2\BENTLE~1.209\MICROS~1\mdl\include\VCVarsQueryRegistr
y2010.mki
line: 435, C:\PROGRA~2\BENTLE~1.209\MICROS~1\mdl\include\AssertToolSet.mki
line: 109, C:\PROGRA~2\BENTLE~1.209\MICROS~1\mdl\include\ConfigurePolicy.mk
i
line: 28, C:\PROGRA~2\BENTLE~1.209\MICROS~1\mdl\include\mdl.mki
line: 27, E:\MyProgram\Geology3D\Geology3D\MDL\MyApp.mke

geotri2

赞同来自:

本帖最后由 MSFans 于 2011-6-29 13:56 编辑

按这个贴子的办法:http://www.bentleybbs.com/foru ... %3DVS
老生常谈,将
NO_COMPILERS_MKI = 1
BUILD_USING_NoToolset = 1
复制代码加入mke的
%include mdl.mki
解决问题。

MicroStation迷

赞同来自:

最近发现开发MicroStation MDL应用与所使用的VS版本还是很有关系的。对于新的C++Object API,特别是以std::vector等模板为参加的函数,必须要用固定的VS版本才能生成正确的结果(这个好像是STL的问题)。所以,如果您开发V8i NativeCode MDL应用程序而且遇到这种情况的话,要能想到是VS版本的问题。

背风的阴凉地儿

赞同来自:

符老师,我现在用 win7 64位,v8iss3 , visual Studio 2010, 这两天发现一个问题,用你这个帖子的方法,编译你的那个 pointlcouds 程序,能够编译成功,但是运行时会出错。
同样的代码,我拿到另一台 win7 32位,vs2008 的机器,同样用 v8iss3 编译,运行就没有任何问题,编译好的 ma 和 dll ,拿到我机器,运行也没有问题。
请问符老师,你那里遇到过这个问题吗,是 vs2010 的问题,还是 64 位的问题。

背风的阴凉地儿

赞同来自:

再补充说明下,我机子似乎编译的其他程序都没有问题,只有这个 pointclouds 会执行出错。

背风的阴凉地儿

赞同来自:

本帖最后由 背风的阴凉地儿 于 2014-3-3 11:24 编辑

周末折腾了很长时间,发现 vs 的版本对新型 api 的程序影响挺大的,我又用另一台装 win8 64位的机器试了下,装 vs2008 ,编译我的程序,发现没问题,那么问题肯定出在 vs 的版本上。
但是我机子又不想装回 vs2008 ,前一段很多工程都升级到 2010 了。
现在我的处理方法借鉴了上面帖子里的做法,把其他机器上的 Microsoft Visual Studio 9.0 里面的 common7 和 vc 全都拷贝到本地。
然后 mke 里面指定用vs2008, set BUILD_USING_VS2008=1
另外 win7 64,也有些不同的地方,程序装在 Program Files (x86) 里面,这个括号在有些地方不被支持,所以还只能把 vs2008 的注册表信息添加到本地。
添加注册表时,需要用 \Windows\SysWOW64\regedt32.exe 来添加,才能被32位注册表程序读取。这个和 odbc 设置一样。
需要添加的注册表项如下:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/9.0/Setup/VS
ProductDir=C:\Program Files (x86)\Microsoft Visual Studio 9.0\

编译完的 dlll 用 depends 查看,会发现引用的 dll 不同:

背风的阴凉地儿

赞同来自:

进一步测试:
程序调试没问题,可以附加成功。
以前其他的 vc 程序没有影响。

gds218

赞同来自:

真的没问题吗?
不是有个帖子说 2010 和 2005编译出来的不一样, 会出现不可预知的错误吗?

sunchao

赞同来自:

老实点, 升级vs干嘛啊。
我们的目标是能用, 完成自己的工作, 而不是搞死他。
升级vs对客户没有任何意义

背风的阴凉地儿

赞同来自:

我升级 vs 也是无奈,其他的工作有时候会用到新版本,还要参与公司 arcgis 开发,还有一些独立程序,原来客户总抱怨,我们的东西对 64位,对win7 支持不好等等。

MSFans - IT难,70后,ms发烧友,高烧未退。

赞同来自:

你试一试有关WString的接口,估计用vs2010的话,都得出问题 。

zwindcn

赞同来自:

是的,不建议升级到VS 2010。有些使用WString的函数会使microstation崩溃。之前就是升级到vs 2010后碰到了microstation崩溃的问题,找了好长时间才知道是升级vs 2010后WString的问题。

MicroStation迷

赞同来自:

【最后结论】:还是老老实实用VS2005吧,免得给自己添麻烦。我这个帖子有些误导大家了,不好意思。

sunchao

赞同来自:

> forum.php?mod=redirect&goto=findpost&pid=35377&ptid=3514
我升级 vs 也是无奈,其他的工作有时候会用到新版本,还要参与公司 arcgis 开发,还有一些独立程序,原来客 ...


1. 升级VS不能改变用户体验. 至于64位, 那个只能靠Bentley出64位版的Microstation, 你是没办法的.
至于win7支持的不好, 这个我就没感觉到, Microstation在win7上用的好好的. 当然, 也有可能是你把一个需要被修改的文件放program files目录了下, 因为偷懒, 就和exe文件放在一起. 这个在win7下就是会出问题, 这个是你自己的代码写的有问题, 不能怨别人.

2. VS可以多版本并存的, 不会冲突. 我的电脑上装了VS2005, 2008, 2010, 都能各自正常使用

MSFans - IT难,70后,ms发烧友,高烧未退。

赞同来自:

> forum.php?mod=redirect&goto=findpost&pid=35698&ptid=3514
1. 升级VS不能改变用户体验. 至于64位, 那个只能靠Bentley出64位版的Microstation, 你是没办法的.
至于w ...


用vc高版本当然意义重大,C++新的语言特性和功能会大大提高效率,比如lamda表达式、多线程……,你去翻翻新特性就知道了。不是改变用户体验,是让自己爽。

MSFans - IT难,70后,ms发烧友,高烧未退。

赞同来自:

> forum.php?mod=redirect&goto=findpost&pid=35502&ptid=3514
是的,不建议升级到VS 2010。有些使用WString的函数会使microstation崩溃。之前就是升级到vs 2010后碰到了m ...


所以说,也不太可能使用其他编译器替代cl,比如GCC,Clang等。

sunchao

赞同来自:

> forum.php?mod=redirect&goto=findpost&pid=35704&ptid=3514
用vc高版本当然意义重大,C++新的语言特性和功能会大大提高效率,比如lamda表达式、多线程……,你去翻翻 ...


你说的是杂交C++吧.
那你可以这样:
入口程序使用Addins, 使用VS2013都可以.
对于有些Addins不能实现的功能, 使用native code的dll通过import dll的方式, 或者是使用杂交dll的方式

所谓杂交, 就是C++/CLI

sunchao

赞同来自:

这样的开发方式, 才能最大程度的利用最新版本的vs

MSFans - IT难,70后,ms发烧友,高烧未退。

赞同来自:

> forum.php?mod=redirect&goto=findpost&pid=35709&ptid=3514
你说的是杂交C++吧.
那你可以这样:
入口程序使用Addins, 使用VS2013都可以.


我说的是c++ 11

sunchao

赞同来自:

不好意思, 孤陋寡闻了, 多年没有关注C++了, 没想到这个老家伙还能有新特性

要回复问题请先登录注册