public static string DemangleMsvc(string symbolName)
{
StringBuilder sb = new StringBuilder(4096);
int result = NativeMethods.UnDecorateSymbolName(symbolName, sb, sb.Capacity, NativeMethods.UnDecorateFlags.UNDNAME_COMPLETE);
if ((result == 0) || (sb.ToString() == symbolName))
{
return symbolName;
}
// use more compact type names
sb.Replace("unsigned short", "uint16_t");
sb.Replace("short", "int16_t");
sb.Replace("unsigned __int64", "uint64_t");
sb.Replace("__int64", "int64_t");
sb.Replace("unsigned __int32", "uint32_t");
sb.Replace("__int32", "int32_t");
sb.Replace("unsigned __int16", "uint16_t");
sb.Replace("__int16", "int16_t");
sb.Replace("unsigned __int8", "uint8_t");
sb.Replace("__int8", "int8_t");
sb.Replace("__wchar_t", "wchar_t");
return sb.ToString();
}