Porting from VS6 to VC++ 2005

Started by
5 comments, last by Mephs 17 years, 10 months ago
Hey everyone, I just have a quick question regarding porting between Visual Studio 6 and Visual C++ 2005. I'm looking at moving my DirectX9, Visual Studio 6 app into Visual C++ 2005 (probably the Express Edition until I look at purchasing a better one if necessary). I wonder how practical this will be and if i am likely to suffer any problems porting my code as it relies partly on MFC and STL... should it transfer pretty easily or would it require a major rewrite? Am I likely to experience any problems with missing or outdated libraries, bearing in mind that i will start out with only the express edition and I don't know how comprehensive this edition is? Presumably most of the C++ will stay the same, though I gather there are some minor changes such as for loop variable scope? If anyone has any experience of the above issues I'd love to hear of your experience to know if it's worth my time bothering with or better to stick to VS 6? Many thanks, Steve
Cheers,SteveLiquidigital Online
Advertisement
It'll involve a little bit of pain (maybe a lot depending on how much non-standard VC6 "C++" you rely on). However, definitely do it; if you're interested in having C++ as a skill at all, you really need to be using a modern, standards-compliant compiler. VC6 is not a good development tool for modern C++.

Wielder of the Sacred Wands
[Work - ArenaNet] [Epoch Language] [Scribblings]

How much do you use templates? Do you use them for metaprogramming? If you do you might get some problems from different behavior. Also if you relies on pretty obscure STL stuff you might also have some problems. Apart from that I believe it's minor issues like not accesing variables outside their scope. It's pretty hard to say exactly how hard it'll be, it depends on how much you depend on VC6's unique "features".
I don't really depend on templates much at all. I mostly use the containers <vector> and <list>, etc to save the hassle of creating my own container classes.

What I'm most worried about really is having to completely rewrite something because a library doesn't exist, small modification over all my code doesn't bother me too much. I am pretty good at sorting out syntax problems and whatnot, but I really don't get on with linker problems and the like. From the sounds of things so far though, I think I really should go ahead with the port.

It's just an ideal time to do so as I'll be moving from a desktop to a laptop and so as good a time as any to bring the project up-to-date.

Thanks for the helps so far,

Steve
Cheers,SteveLiquidigital Online
You shouldn't have to much to worry about in that case, as MSVC6 contained most (all?) the STL implementation, however skewed to fit MSVC6's templating. I predict many small changes to your code.
[ search: google ][ programming: msdn | boost | opengl ][ languages: nihongo ]
Quote:Original post by CTar
How much do you use templates? Do you use them for metaprogramming?


I highly doubt it since VC++ 6.0's template support is so poor and most of all it does not support partial specializations of class templates making it pretty useless for template metaprogramming without using alot of workrounds (as is the case with boost type traits, mpl, etc, etc).

Quote:Original post by Mephs
I wonder how practical this will be and if i am likely to suffer any problems porting my code as it relies partly on MFC and STL... should it transfer pretty easily or would it require a major rewrite? Am I likely to experience any problems with missing or outdated libraries, bearing in mind that i will start out with only the express edition and I don't know how comprehensive this edition is? Presumably most of the C++ will stay the same, though I gather there are some minor changes such as for loop variable scope?


First remember that visual C++ does not define the C++ standard in anyway, no sole compiler vendor does. Secondly if you've heavily relied on the behaviour of VC++ 6.0 to write C++ code you will no doubt run into problems porting since VC++ 6.0's standard compliance is quite poor in many ways, in the syntax department, in the template department, in the runtime behaviour department (be it in the std library or language itself), etc, etc yes it is that bad (but it can't completely be blamed for since vc++ 6.0 came around just as C++ was being ISO standardized in 1998). here is a offical list of known noncompliance issues with all VC++ compilers upto VC++ 7.0 (.NET 2002).

So there isn't just minor issues there are a major ones aswell, whether this will have a effect on you depends on how much you have become dependant on the behaviour VC++ 6.0 to know the C++ language properly.

You should not rely on the behaviour of any C++ compiler since there does not exist a C++ compiler which is 100% standard compliant (except maybe the Comeau compiler) instead you should rely on the C++ ISO standard, unfortunately you're not the only one to do this.

If you can not afford to purchase copy of the standard (i can't see any reason why since it's dirt cheap in electronic form) then at the very least look at the latest draft version which is free to view here straight from the C++ standards committee's website.

Quote:Original post by Mephs
If anyone has any experience of the above issues I'd love to hear of your experience to know if it's worth my time bothering with or better to stick to VS 6?


If you care about portability, correctness and efficiency (yes this even effects efficiency because things have moved on alot in the compiler department and in the implementation of C++ standard library containers & algorithms department).

You'd be foolish to stick with VC++ 6.0 you're just limiting yourself with ~10 years old technology which is officially a defunct product.

So i seriously suggest you do change over, what you should do is:


  1. First read "C++ standard noncompliance issues with Visual C++ .NET" (which applies to VC++ 6.0 aswell of course).


  2. Then anything you are not 100% sure about refer to the C++ ISO standard, if you don't or can't have a copy then you can view the latest draft spec here.
Thanks for the help all! I managed it in the end, it was easy stuff but lots of it!! My main problem was STL not taking an vector.at(position) as a parameter for insert/erase (figured it out though, it requires an iterator). Then I had God knows how many functions without a return type as it doesn't automatically assume int type for functions. That'll teach me to be sloppy!

Anyhoo, after a couple of quickly resolved linker issues, I have my project up and running in VS Express 2005 (hopefully to purchase the standard edition at some point). Perhaps now the intellisense will work as it's supposed to and I can certainly say that I feel more up to date using this version of Visual Studio, I only wish I'd switched sooner.

Cheers,

Steve
Cheers,SteveLiquidigital Online

This topic is closed to new replies.

Advertisement