Microsoft KB Archive/254726

From BetaArchive Wiki
Knowledge Base


Visio2000: Reverse Engineering Microsoft Visual C++ Code Sometimes Produces Unexpected Results

Article ID: 254726

Article Last Modified on 1/27/2007



APPLIES TO

  • Microsoft Visio 2000 Professional Edition
  • Microsoft Visio 2000 Enterprise Edition



This article was previously published under Q254726

SYMPTOMS

When you use Visio 2000 Professional Edition or Visio 2000 Enterprise Edition to reverse engineer Microsoft Visual C++ code, some types, functions, classes, declarations, namespaces, and definitions are not reverse engineered, or, in some cases, the code is reverse engineered, but is not represented as expected in the Visio drawing.

CAUSE

When you reverse engineer Visual C++ code, some elements in the code may not be reverse engineered or may not be reverse engineered as expected.

Specifically, the following elements are not reverse engineered:

  • Attribute and operation return types
  • Friend classes
  • Namespaces
  • Template definitions

Some elements may not be reverse engineered as expected:

  • If a function has no function declaration outside its class definition, then the parameter names are not reverse engineered.
  • If function names are long and have a long list of parameters, they may not be reverse engineered.
  • Inline functions are reverse engineered, but the fact that they are inline is not.
  • Multiple template instantiation is reverse engineered as multiple instances, not just one.
  • Template classes are not reverse-engineered as parameterized classes.
  • In some cases, when reverse engineering template classes, template classes and methods may be missing.
  • Array dimensions are not reverse engineered for class attributes or global variables.
  • Array dimensions are reverse engineered for method parameters. However, the first array dimension for parameters will be lost.

    EXAMPLE: The parameter in

    int func(int arr[10][10])

    will be reverse engineered as

    int arr[][10]
                        
  • Abstract classes are reverse engineered, but the fact that they are abstract is not.
  • Abstract functions are reverse engineered, but the fact that they are abstract is not.


RESOLUTION

To maximize results when reverse engineering Visual C++ code, follow these guidelines:

  • If you make any changes in your project, on the Build menu, click Build in Visual Studio 6.0 to build the modified files and to see the changes in your Visio drawing.
  • If you are using Active Template Library (ATL) and Standard Template Library (STL), consider not checking those boxes in the Visio UML Options dialog box in Visual C++ in Visual Studio 6.0. ATL and STL make heavy use of templates.


NOTE: Checking boxes in the Visio UML Options dialog box can potentially reverse engineer a lot of information, which will increase the time that Visio takes to finish reverse engineering.


Keywords: kbprb KB254726