We currently have a complex VC++ software application, which uses a
library like ObjectARX to build the dll. I feel there are many
features in C# like Collections, Generics, and other libraries which
can be used to build the current application in a better and efficient
(Remark. ObjectARX is the extension API for AutoCAD. Thus, OP is asking about a domain-specific application known to require deep domain-specialized knowledge.)
Take a deep breath and ask yourself whether the complexity of the software comes from the domain (computer-aided design and computational geometry), or from the choice of language. If the complexity comes from the domain, changing language may not significantly make your job easier.
Case in point, using a dumb example: a
Polygon is not the same as
IList<Point2>. How would an
IList know how to check for repeated points? Self-intersecting segments? Embedding a coplanar 2D polygon into a plane in the 3D space?
Occasionally, the lack of some syntactic sugar in some languages will indeed complicate domain-specific software development. A prime example is lambda function. With C++11, these essential syntactic sugar can be used to simplify and modernize the code. If this is the case, modernizing the C++ code may be a better choice than migrating to C#.
Another remark to other readers: Each release of ObjectARX for Visual Studio is tied to a specific version of Visual Studio, and is neither backward nor forward compatible. As of ObjectARX 2013, use of VS2010 SP1 is required. (Thus, OP cannot easily recommend using VS2012 unless the vendor release a new version of ObjectARX and the customer (OP's employer) upgrades to it.) http://usa.autodesk.com/adsk/servlet/item?id=12257036&siteID=123112
Fortunately, VS2010 SP1 also supports a useful subset (but not all) of the C++11 syntax. In particular the iterator for-loop would simplify newly-written code somewhat. The benefit, however, might not justify modifying old code, though.
I have been thinking about it, but I am not sure on how to present it
to my Supervisor and colleagues.
The best way is to just informally ask your supervisor (ideally the software architect) for consideration. It is his/her job to keep an eye on every possibility, including platform choices, migrations and the long-term viability of the project.
If you actually find yourself more knowledgeable than your supervisor / software architect (which is highly unlikely), find another job.
I would appreciate any help, to help me think in the right direction
and highlight the points to bring it to the team.
Roman wasn't built in a day.
At any point in time in your hypothetical re-implementation, the application as a whole needs to be demonstratable (at least runnable and testable). Thus, it will contain parts written in VC++ and parts written in C#. If you can demonstrate that the application still works in a satisfactory way (no major bugs, issues or inefficiency), you have found a "jungle path" from the project's C++ present to the C# future.
A sample worksheet:
- Suppose 5% of the project will be migrated to C#.
- Which modules or components in the project would you choose to be migrated to C#?
- How do they interoperate with the rest of the application?
- Do you foresee any difficulties?
- Repeat the question for 20%, 40%, 60%, 80%, and 99%.
Another important question to ask:
- Are there other teams in the company (or paying customers) that depend on the application being C++? Will these teams agree to migrate to C# as well, or will your team be able to provide interoperability for that team?
If you have done this, present your findings to the software architect, who will then be responsible for identifying roadblocks ahead in the remaining sections of this jungle path.
If you don't know how C++ and C# can interoperate ... I suggest you close this question ASAP before a torrent of downvotes burn away your hard-earned reputation points ...