Here is what I've gleaned so far, use at your own risk.
Note: In particular, this *has* changed before (going to MSVC 4), and could quite possibly change in the future.
stdcall:?funcName @@YG retType params-list Zcdecl:?funcName @@YA retType params-list Zthiscall:?methodName @ className @@AAE retType param-list Zstatic method call:?methodName @ className @@CA retType param-list ZIf there are parameters, param-list is a list of them, followed by a @ Otherwise, param-list is X (void), with no @ aftwards Basic types:D is char int8 E is unsigned char uint8 F is short int16 G is unsigned short uint16 H is int int32 I is unsigned int uint32 J is long int32 K is unsigned long uint32 M is float float32 N is double float64 X is void _J is int 64 int64 _K is unsigned int 64 uint64 _N is boolPointers:PA prefixes a type to indicate a pointer PB prefixes a type to indicate a const pointer Note: volatile is not represented in the mangled/decorated nameStructures:UstructName@@ is structName a pointer to a struct occurs as PA or PB followed by a U... Udigit@ is a constructing reference to the previous digitth U definition (1 based). In other words, it creates a new definition that can be referenced later on as well. digit is a reference to the previous digitth U definition (0 based!!!) For structures, a PAUname@@ will be referenced as 0 in other parameters of the form name *, but the first parameter of the form name will appear as U1@ and subequently as 1. The converse is having a Uname@@ first, and then parameters of the form name * will appear first as PAU1@ and subsequently as 1, and parameters of the form name as 0. Note: 0 and 1 in these two examples are the positions of the first Ux@@ and first Uy@ declarations, they could be 2 and 4 if there were two decls. before the first, and one decl in between.
Copyright (C) 2003 Bottled Light, Inc.