以下是该函数的简要说明:
DWORD UnDecorateSymbolNameW(
PCWSTR DecoratedName,
PWSTR UnDecoratedName,
DWORD UndecoratedLength,
DWORD Flags
);
参数说明:
- DecoratedName: 指向已装饰的符号名称的指针。
- UnDecoratedName: 指向用于存储未装饰符号名称的缓冲区的指针。
- UndecoratedLength: 缓冲区长度,即 UnDecoratedName 的字符数。
- Flags: 控制函数行为的标志,可以是以下值的组合:
- UNDNAME_COMPLETE: 尽可能提供完整的信息。
- UNDNAME_NAME_ONLY: 仅返回未装饰的名称。
- UNDNAME_NO_ACCESS_SPECIFIERS: 忽略访问修饰符。
- UNDNAME_NO_ALLOCATION_MODEL: 忽略分配模型。
- UNDNAME_NO_ARGUMENTS: 忽略参数列表。
- UNDNAME_NO_SPECIAL_SYMS: 忽略特殊符号。
- UNDNAME_NO_MEMBER_TYPE: 忽略成员类型。
- UNDNAME_NO_MS_KEYWORDS: 忽略Microsoft关键字。
- UNDNAME_NO_FUNCTION_RETURNS: 忽略函数返回类型。
该函数的返回值是实际写入到 UnDecoratedName 中的字符数,不包括终止 null 字符。如果函数失败,则返回0。
示例用法:
#include <windows.h>
#include <dbghelp.h>
int main() {
const wchar_t* decoratedName = L"?MyFunction@@YAHH@Z"; // 一个已装饰的C++函数名
wchar_t undecoratedName[256]; // 用于存储未装饰的函数名的缓冲区
DWORD result = UnDecorateSymbolNameW(decoratedName, undecoratedName, sizeof(undecoratedName) / sizeof(wchar_t), UNDNAME_COMPLETE);
if (result > 0) {
wprintf(L"Undecorated Name: %s\n", undecoratedName);
} else {
wprintf(L"UnDecoration failed. Error code: %lu\n", GetLastError());
}
return 0;
}
请注意,Dbghelp.h 和 Dbghelp.lib 库文件通常与调试支持一起安装。在编译时,确保链接器能够找到 Dbghelp.lib。
转载请注明出处:http://www.zyzy.cn/article/detail/26356/Win32 API/Dbghelp.h/UnDecorateSymbolNameW