Bartlomiej Lewandowski
Bartlomiej Lewandowski

Reputation: 11190

Get function parameters name visual studio

I am trying to get a list of parameters and the return type from a mangled function compiled in visual studio.

I know that I can use

UnDecorateSymbolName(function.c_str(), undecoratedName, 200, UNDNAME_COMPLETE))

but this just gives me another string, and I have to figure out if the string starts with a return type, or a specifier.

Is there a function to return SymbolNameInfo? Something along the lines:

struct SymbolInfo
{
    char[255] symbolName
    char[255] returnType
    char[255] parameters
};

Upvotes: 8

Views: 822

Answers (2)

Bartlomiej Lewandowski
Bartlomiej Lewandowski

Reputation: 11190

I managed to find an answer. It's not perfect, maybe someone else will have some better idea.

What I did was use

UnDecorateSymbolName(function.c_str(), undecoratedName, 200, UNDNAME_COMPLETE))

with different flags.

The flags I used with explanation:

UNDNAME_COMPLETE // this returns the whole undecorated name.
UNDNAME_NAME_ONLY // this return just the name of the symbol
UNDNAME_NO_FUNCTION_RETURNS // this return a string like UNDNAME_COMPLETE 
                            // but without the return type

I used these 3 flags to do the following:

  1. To get the name, I just used UNDNAME_NAME_ONLY.
  2. To get the return type, I did a substring of COMPLETE ending at NO_FUNCTION_RETURNS
  3. To get the parameters, I did a substring of COMPLETE starting at the end of NAME ending at COMPLETE.size()

How this looks after test:

function : ?encrypt@@YAPADPAD@Z 
fullName : char * __cdecl encrypt(char*)

SymbolInfo.name : encrypt 
SymbolInfo.returnType : char *
SymbolInfo.parameters : (char *)

Upvotes: 1

Cheers and hth. - Alf
Cheers and hth. - Alf

Reputation: 145419

The easiest way to get unmangled name is probably to use Microsoft's undname.exe, installed with Visual Studio.

For doing it programmatically, look at e.g. (http://code.google.com/p/pdbparse/source/browse/trunk/src/undname.c)*.

The above two references the result of a minute or so of googling. ;-)


*: jus’ hoping that some helpful bear won't come along to swat that perceived fly on my nose, but they always do

Upvotes: 0

Related Questions