Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / Languages / Managed C++ / November 2005

Tip: Looking for answers? Try searching our database.

Conversion from 2003 to 2005 just too hard

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Peter Oliphant - 11 Nov 2005 18:11 GMT
I've been trying all morning to convert my 2003 project (managed) to 2005
(/clr since I have both managed and unmanaged code). I'm guessing I have
tens of thousands of lines of code to change. Did a lot of converting '__gc'
to 'ref', converting '*' to '^', converting 'new' to 'gcnew'. Of course this
can't be done with a blanket replace, as my code has both managed and
unmanaged segments. Thus I have to do them one-by-one. Also, things are
missing. Like Form no longer has a Bounds property anymore (or at least if I
try to use it I get an 'it doesn't exist' error, which is a line that
compiled just fine in 2003). I can't have private virtual function even
though they were fine in 2003 (ok, i can see why they have to be protected).
In short, it's kind of exasperating to have to deal with an upgrade that
isn't even remotely backwards compatible (not even with old syntax switched
on)...

But, even after willing to do all of these changes, I now think I should
stop, having run into the Graphics class.

Graphics methods such as DrawPolygon() apparently no longer compile. The
only versions given are the ones using old syntax format for the required
__gc Points[] array. No /clr compatible overload of this function is given
(at least not in the look-ahead pop-up that comes up for DrawPolygon). So
how does one now draw a Polygon with the Graphics class now?

It's looking more and more that if you started in 2003 one should
(unfortunately) stay in 2003. Starting a project in 2005 might be good, but
converting is extremely difficult and prone to lots of erros. And even the
conversion I did into an old syntax 2005 version now returns with an
exception error it didn't have in 2003.... : (

Why didn't MS write a conversion tool? Sure it probably couldn't do
everything, but it could do the most obvious stuff. Like:

(1) identify '__gc' stuff and 'ref' it (note this doesn't work as a blanket
edit replace since '__gc' is also used to define other stuff, like arrays)
(2) replace appropriate '*' with '^', replace appropriate 'new' with
'gcnew', replace the '__' words with the new syntax versions (e.g.,
'__delegate' with 'delegate')
(3)  make appropriate private virtual methods protected
(4) change abstract classes to the new syntax
(5)  redefine arrays with the new 'array' syntax
(6) identify old methods that no longer works and put in the new syntax
(e.g., replace MakePolygon() code lines with the new syntax, and do this
will all such methods which have changed format)
(7) etc.

I've seen compiler errors that say stuff like "you did X, use Y instead".
Why doesn't the compiler give an option to make those changes FOR YOU?

I think 2005 is way too different from 2003 to call it an 'upgrade'. It's
basically incompatible with 2003 if one decided to use Managed C++...

 [==P==]
Nishant Sivakumar - 11 Nov 2005 18:56 GMT
I understand your pain, Peter - but for about an year and a half, it was
pretty obvious that investing time in MC++ code would not be such a smart
thing to do, ever since Herb Sutter talked about C++/CLI a few PDCs ago.
Every time someone had asked if it was worthwhile to try Managed C++ (old
syntax), I had explicitly told them that my advice would be to wait for
2005. I did this in spite of the fact that this would probably affect the
sales of my book (which targetted the old syntax).

On a related note, this might help some of us understand why a lot of VB6ers
were pissed when VB.NET came out, it wasn't an upgrade, it was a whole new
language/syntax etc.

On another related note, I vaguely remember Stan Lippman saying that he was
working on an old syntax to new syntax converter - but I am not sure that he
ever got around to finishing that.

Signature

Regards,
Nish [VC++ MVP]

> I've been trying all morning to convert my 2003 project (managed) to 2005
> (/clr since I have both managed and unmanaged code). I'm guessing I have
[quoted text clipped - 49 lines]
>
>  [==P==]
Sebastian Dau - 14 Nov 2005 10:27 GMT
>I understand your pain, Peter - but for about an year and a half, it was
>pretty obvious that investing time in MC++ code would not be such a smart
[quoted text clipped - 3 lines]
>2005. I did this in spite of the fact that this would probably affect the
>sales of my book (which targetted the old syntax).

Are you telling us as an MVP, that you suggest not to use a whole product of
microsoft just because
you are familiar with the MS's inconvenient way of improving unlovely
products?

Isn't it pain in the a.s situation to suffer a monololists stategies?
downward compatibility should be
a development goal not an unloved duty.

.NET rocks and MS did a good job but they should continue their work and
improve update stragegies.

Greets, Sebastian Dau
Tarek Madkour [MSFT] - 11 Nov 2005 19:41 GMT
> Graphics methods such as DrawPolygon() apparently no longer compile.
> The only versions given are the ones using old syntax format for the
> required __gc Points[] array. No /clr compatible overload of this
> function is given (at least not in the look-ahead pop-up that comes up
> for DrawPolygon). So how does one now draw a Polygon with the Graphics
> class now?

IntelliSense (the look-ahead popup) can only work in one C++ managed
code syntax: either the old managed C++ syntax or the new C++/CLI
syntax. When you have projects in the solution that have a mix of both,
IntelliSense gets confused. (In reality, in some situations it may also
get confused if you started with old syntax and set it to new syntax).

If you would like to get IntelliSense on the prototypes of some
functions in the new syntax when you have some of those "mixed-syntax"
solutions, you can just create a new solution that has only one project
that's compiled with the new syntax. IntelliSense in that project will
show exactly what you want to see: prototypes in the new syntax only.
You can use that as help when writing code in the "mixed-syntax"
solutions.

I hope this helps.

Thanks,
Signature

Tarek Madkour, Visual C++ Team
This posting is provided "AS IS" with no warranties, and confers
no rights.

Peter Oliphant - 15 Nov 2005 00:13 GMT
> If you would like to get IntelliSense on the prototypes of some
> functions in the new syntax when you have some of those "mixed-syntax"
> solutions, you can just create a new solution that has only one project
> that's compiled with the new syntax.

Considering my application has ten's of thousands of lines of old syntax
code, this statement reminded me of the Larson cartoon where a careful study
of a scientist blackboard reveals the words with a pointer that says 'and a
*miracle* happens here"...LOL

Seriously, I really think the new syntax is great, just conversion to it
from the old syntax is tough. I started a new project from scratch
(different application), and I'm loving the new syntax! But I'm also trying
to convert an existing six-week old project from old syntax to new syntax,
and I'm NOT loving that... :)

[==P==]

>> Graphics methods such as DrawPolygon() apparently no longer compile.
>> The only versions given are the ones using old syntax format for the
[quoted text clipped - 20 lines]
>
> Thanks,
Arnaud Debaene - 11 Nov 2005 22:04 GMT
> Graphics methods such as DrawPolygon() apparently no longer compile.
> The only versions given are the ones using old syntax format for the
> required __gc Points[] array. No /clr compatible overload of this
> function is given (at least not in the look-ahead pop-up that comes
> up for DrawPolygon). So how does one now draw a Polygon with the
> Graphics class now?

IntelliSense is not and has never been the reference to say what is valid
and what is not, you shouldn't rely on it. The reference is :
1) MSDN.
2) The compiler error messages.

If IntelliSense doesn't give what you think is the correct sytnax, just
write it by hand and try to compile it.

This does compile with /clr (it's a copy-paste from MSDN documentation) and
it works correctly in the Paint handler of a WinForm :

Pen^ blackPen = gcnew Pen( Color::Black,3.0f );
Point point1 = Point(50,50);
Point point2 = Point(100,25);
Point point3 = Point(200,5);
Point point4 = Point(250,50);
Point point5 = Point(300,100);
Point point6 = Point(350,200);
Point point7 = Point(250,250);
array<Point>^ curvePoints =
{point1,point2,point3,point4,point5,point6,point7};

e->Graphics->DrawPolygon( blackPen, curvePoints );
//e is a valid PaintEventArgs

Arnaud
MVP - VC
Peter Oliphant - 11 Nov 2005 22:36 GMT
I wish there was a way to change *part* of my source to /clr while leaving
the rest as old syntax. I know this is an unreasonable desire, since it
would have problems in one section if it refered to something in another
section (e.g., it would be weird if GC_Class^ were used in one place and
GC_Class* in another).

My problem is that for me to change it to /clr syntax I have to change *all*
of my source code to be compliant for it to compile successful. In my case
that looks like it would take changing literally thousands if not tens of
thousands of lines of code (and I only started writing this code 6 weeks
ago, I tend to be verbose...lol). Thus, its a daunting task that must work
in its entirety or not at all.

And I ran into a 'road block' ala a  problem with methods like the Graphics
class method DrawPolygon(). According to MSDN on-line, this Graphics class
method ONLY takes Point __gc[] as a parameter for the vertex points list of
the polygon to be formed, which is old syntax format. No /clr compliant
version appears to exist. I can't find any new version in MSDN on-line
documentation, so it looks like DrawPolygon is no longer available.

I doubt that this is the case, some new version of DrawPolygon probably does
exist, or some way to still use the old version under /clr (I know it
doesn't work without some change, the compiler complains about anything of
the form  Point _gc[]'), but how do I find out the details to it? Will a
method that has a parameter of the form "Point __gc[] point" work if I give
it something defined like this:

array<Point^>^ point

[==P==]

>> Graphics methods such as DrawPolygon() apparently no longer compile.
>> The only versions given are the ones using old syntax format for the
[quoted text clipped - 30 lines]
> Arnaud
> MVP - VC
Carl Daniel [VC++ MVP] - 11 Nov 2005 22:59 GMT
>I wish there was a way to change *part* of my source to /clr while leaving
>the rest as old syntax. I know this is an unreasonable desire, since it
[quoted text clipped - 25 lines]
>
> array<Point^>^ point

Yes, they're exactly the same type, one spelled in the old syntax, the other
in the new syntax.

-cd
Holger Grund - 12 Nov 2005 13:58 GMT
"Carl Daniel [VC++ MVP]" <cpdaniel_remove_this_and_nospam@mvps.org.nospam>
wrote

>> the form  Point _gc[]'), but how do I find out the details to it? Will a
>> method that has a parameter of the form "Point __gc[] point" work if I
[quoted text clipped - 4 lines]
> Yes, they're exactly the same type, one spelled in the old syntax, the
> other in the new syntax.

Umh, unless I'm missing something these don't match because you
have another level of indirection here.

I guess it should be array<Point>^ point (I'm too lazy to look it up, but
I would design Point as a value type).

Otherwise it should have been
Point* [] point
in the first place.

-hg
Arnaud Debaene - 12 Nov 2005 07:00 GMT
> And I ran into a 'road block' ala a  problem with methods like the
> Graphics class method DrawPolygon(). According to MSDN on-line, this
[quoted text clipped - 3 lines]
> new version in MSDN on-line documentation, so it looks like
> DrawPolygon is no longer available.
Have you read and try the example I gave you?

And of course, the new syntax is documented on MSDN :
http://msdn2.microsoft.com/en-us/library/dd0c4s09(en-US,VS.80).aspx

The C++ syntax has changed, the BCL contents hasn't changed that much...

Arnaud
MVP - VC
Peter Oliphant - 14 Nov 2005 15:22 GMT
You're correct, that DrawPolygon is defined and up-to-date on the link you
provided (thanks!):

> http://msdn2.microsoft.com/en-us/library/dd0c4s09(en-US,VS.80).aspx

But, I kind of ran into a 'decoy' page, ala this other page in on-line MSDN:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlr
fsystemdrawinggraphicsclassdrawpolygontopic.asp


Any hints as how to find the most recent and up-to-date pages on MSDN? You
can see how I was a bit confused having only found the link I gave above,
and IntelliSense 'said' the same thing... : )

[==P==]

>> And I ran into a 'road block' ala a  problem with methods like the
>> Graphics class method DrawPolygon(). According to MSDN on-line, this
[quoted text clipped - 12 lines]
> Arnaud
> MVP - VC
Nishant Sivakumar - 14 Nov 2005 18:24 GMT
The offline MSDN collection that's installed with VS.NET 2005 is quite
up-to-date too!

Signature

Regards,
Nish [VC++ MVP]

> You're correct, that DrawPolygon is defined and up-to-date on the link you
> provided (thanks!):
[quoted text clipped - 28 lines]
>> Arnaud
>> MVP - VC

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.