Version 1 of demangle

Updated 2003-10-23 14:17:04

EB: In need of demangling a C++ symbol under windows, and failed to googled such tool, I have successfully ffidled UnDecorateSymbolName() function.

The signature of this funtion, found in imagehlp.dll, is:

 DWORD UnDecorateSymbolName(
   IN  LPSTR DecoratedName,  
   OUT LPSTR UnDecoratedName,  
   IN  DWORD UndecoratedLength,  
   IN  DWORD Flags           
 );

The function take a string buffer for the undecorated name in output. I don't know if this is the good way to do this. I reserve a string of 1024 chars for it.

 load "ffidl05.dll"

 ffidl::callout \
    dll_UnDecorateSymbolName {pointer-utf8 pointer-utf8 int int} int \
    [ffidl::symbol "imagehlp.dll" UnDecorateSymbolName]

 proc demangle {symbol} {
    set ret [string repeat " " 1024]
    dll_UnDecorateSymbolName $symbol $ret 1024 0
    set ret
 }