关于修饰后名称的问题

14号选手 2013-05-01 10:42:07
程序在编译之后形成一个目标文件,该程序中的函数名和变量名会存放在符号表中,但是有可能不同的文件中命名会出现问题,所以vc++就有一个修饰后名称以此来防止同名的现象(c++则是利用了名称空间)
敲了一个程序来测试(用ms的一个UnDecoratedName90的API来测试),是包含在<DBGHELP.H>的头文件中,但是编译之后为什么总是显示无法打开此文件。。。难道是没有导入库的原因????不过我在下面也加了一句,各位帮忙看看。。。。。
#include <stdio.h>
#include <windows.h>
#include <DbgHelp.h>
#pragma comment( lib, "DbgHelp" )//将<DbgHelp.h>导入库

int main(int argc,char *argv[])
{
char buffer[256];
if(argc==2)
{
UnDecorateSymbolName(argv[1],buffer,256,0);
printf(buffer);
}
else
{
printf("Usage:2-4.exeDecoratedName\n");
}
return 0;
}
...全文
244 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
合肥老牛 2013-05-13
  • 打赏
  • 举报
回复
不太懂,我是玩vb的。
sophy520eangel 2013-05-09
  • 打赏
  • 举报
回复
DbgHelp库需要外部导入的,系统默认是不自带的~
赵4老师 2013-05-09
  • 打赏
  • 举报
回复
引用 12 楼 zhao4zhong1 的回复:
[quote=引用 9 楼 xuchao1229 的回复:] [quote=引用 8 楼 zhao4zhong1 的回复:]
#include <stdio.h>
#include <windows.h>
#include <ImageHlp.h>
char dsn[1024];
void main(int argc,char **argv) {
    if (argc<2)  {
        printf("Usage:       %s DecorateSymbolName\n  to UnDecorateSymbolName.\n",argv[0]);
        printf("For example: %s ??4COleDateTime@@QAEABV0@N@Z\n",argv[0]);
        printf("public: class COleDateTime const & __thiscall COleDateTime::operator=(double)\n");
        return;
    }
    if (0==UnDecorateSymbolName(argv[1],dsn,1024,UNDNAME_COMPLETE)) {
        printf("UnDecorateSymbolName %s ERROR %08lx!",argv[1],GetLastError());
    } else {
        printf("%s\n",dsn);
    }
}
编译倒是没问题,就是链接出问题了[/quote]
#pragma comment(lib,"imagehlp")
#include <stdio.h>
#include <windows.h>
#include <ImageHlp.h>
char dsn[1024];
void main(int argc,char **argv) {
    if (argc<2)  {
        printf("Usage:       %s DecorateSymbolName\n  to UnDecorateSymbolName.\n",argv[0]);
        printf("For example: %s ??4COleDateTime@@QAEABV0@N@Z\n",argv[0]);
        printf("public: class COleDateTime const & __thiscall COleDateTime::operator=(double)\n");
        return;
    }
    if (0==UnDecorateSymbolName(argv[1],dsn,1024,UNDNAME_COMPLETE)) {
        printf("UnDecorateSymbolName %s ERROR %08lx!",argv[1],GetLastError());
    } else {
        printf("%s\n",dsn);
    }
}
[/quote] 正解!
奔跑的大象 2013-05-09
  • 打赏
  • 举报
回复


网上下载《WDKDocs_12112009》这个包就行了,CSDN我只能传50M以下的包,我传不了,安装完成之后,在工程里的附加目录添加这个目录就可以解决这个问题。
奔跑的大象 2013-05-09
  • 打赏
  • 举报
回复
应该是库里没有这个文件吧,楼主可以下一个Everthing,Mic SDK目录下面有没有这个文件,如果没有,可以尝试下一个WinDDK,将里面的文件复制到Mic SDK目录下面,再尝试。
奔跑的大象 2013-05-09
  • 打赏
  • 举报
回复
TO:xuchao1229 http://pan.baidu.com/share/link?shareid=466803&uk=605320165
赵4老师 2013-05-09
  • 打赏
  • 举报
回复
#pragma comment(lib,"imagehlp")
14号选手 2013-05-09
  • 打赏
  • 举报
回复
引用 14 楼 zhaobangyu 的回复:
网上下载《WDKDocs_12112009》这个包就行了,CSDN我只能传50M以下的包,我传不了,安装完成之后,在工程里的附加目录添加这个目录就可以解决这个问题。
能否给个链接?
赵4老师 2013-05-08
  • 打赏
  • 举报
回复
引用 9 楼 xuchao1229 的回复:
[quote=引用 8 楼 zhao4zhong1 的回复:]
#include <stdio.h>
#include <windows.h>
#include <ImageHlp.h>
char dsn[1024];
void main(int argc,char **argv) {
    if (argc<2)  {
        printf("Usage:       %s DecorateSymbolName\n  to UnDecorateSymbolName.\n",argv[0]);
        printf("For example: %s ??4COleDateTime@@QAEABV0@N@Z\n",argv[0]);
        printf("public: class COleDateTime const & __thiscall COleDateTime::operator=(double)\n");
        return;
    }
    if (0==UnDecorateSymbolName(argv[1],dsn,1024,UNDNAME_COMPLETE)) {
        printf("UnDecorateSymbolName %s ERROR %08lx!",argv[1],GetLastError());
    } else {
        printf("%s\n",dsn);
    }
}
编译倒是没问题,就是链接出问题了[/quote]
#pragma comment(lib,"imagehlp")
#include <stdio.h>
#include <windows.h>
#include <ImageHlp.h>
char dsn[1024];
void main(int argc,char **argv) {
    if (argc<2)  {
        printf("Usage:       %s DecorateSymbolName\n  to UnDecorateSymbolName.\n",argv[0]);
        printf("For example: %s ??4COleDateTime@@QAEABV0@N@Z\n",argv[0]);
        printf("public: class COleDateTime const & __thiscall COleDateTime::operator=(double)\n");
        return;
    }
    if (0==UnDecorateSymbolName(argv[1],dsn,1024,UNDNAME_COMPLETE)) {
        printf("UnDecorateSymbolName %s ERROR %08lx!",argv[1],GetLastError());
    } else {
        printf("%s\n",dsn);
    }
}
14号选手 2013-05-08
  • 打赏
  • 举报
回复
引用 10 楼 buyong 的回复:
#pragma comment( lib, "DbgHelp.lib" )
这个试过了的。。。。。
buyong 2013-05-08
  • 打赏
  • 举报
回复
#pragma comment( lib, "DbgHelp.lib" )
14号选手 2013-05-07
  • 打赏
  • 举报
回复
引用 4 楼 derekrose 的回复:
dll放哪里了
可不可以去下一个这个库,然后手动把头文件添加进head files里面???
14号选手 2013-05-07
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
#include <stdio.h>
#include <windows.h>
#include <ImageHlp.h>
char dsn[1024];
void main(int argc,char **argv) {
    if (argc<2)  {
        printf("Usage:       %s DecorateSymbolName\n  to UnDecorateSymbolName.\n",argv[0]);
        printf("For example: %s ??4COleDateTime@@QAEABV0@N@Z\n",argv[0]);
        printf("public: class COleDateTime const & __thiscall COleDateTime::operator=(double)\n");
        return;
    }
    if (0==UnDecorateSymbolName(argv[1],dsn,1024,UNDNAME_COMPLETE)) {
        printf("UnDecorateSymbolName %s ERROR %08lx!",argv[1],GetLastError());
    } else {
        printf("%s\n",dsn);
    }
}
编译倒是没问题,就是链接出问题了
赵4老师 2013-05-07
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <windows.h>
#include <ImageHlp.h>
char dsn[1024];
void main(int argc,char **argv) {
    if (argc<2)  {
        printf("Usage:       %s DecorateSymbolName\n  to UnDecorateSymbolName.\n",argv[0]);
        printf("For example: %s ??4COleDateTime@@QAEABV0@N@Z\n",argv[0]);
        printf("public: class COleDateTime const & __thiscall COleDateTime::operator=(double)\n");
        return;
    }
    if (0==UnDecorateSymbolName(argv[1],dsn,1024,UNDNAME_COMPLETE)) {
        printf("UnDecorateSymbolName %s ERROR %08lx!",argv[1],GetLastError());
    } else {
        printf("%s\n",dsn);
    }
}
fthislife 2013-05-01
  • 打赏
  • 举报
回复
你查看一下系统环境变量范围内是否有DbgHelp.dll的库
14号选手 2013-05-01
  • 打赏
  • 举报
回复
引用 4 楼 derekrose 的回复:
dll放哪里了
找了半天,include里面也没有这个头文件。。。。。。
14号选手 2013-05-01
  • 打赏
  • 举报
回复
引用 3 楼 fthislife 的回复:
[quote=引用 2 楼 xuchao1229 的回复:] [quote=引用 1 楼 fthislife 的回复:] 你查看一下系统环境变量范围内是否有DbgHelp.dll的库
是这个吗???? [/quote] %path%的环境变量下的目录,以及VC的库包含目录下是否有[/quote] \90\Tools\Binn\VSShell\Common7\IDE\
derekrose 2013-05-01
  • 打赏
  • 举报
回复
dll放哪里了
fthislife 2013-05-01
  • 打赏
  • 举报
回复
引用 2 楼 xuchao1229 的回复:
[quote=引用 1 楼 fthislife 的回复:] 你查看一下系统环境变量范围内是否有DbgHelp.dll的库
是这个吗???? [/quote] %path%的环境变量下的目录,以及VC的库包含目录下是否有
14号选手 2013-05-01
  • 打赏
  • 举报
回复
引用 1 楼 fthislife 的回复:
你查看一下系统环境变量范围内是否有DbgHelp.dll的库

是这个吗????

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧