【发布时间】:2011-06-21 18:55:46
【问题描述】:
我正在尝试从可执行文件中导出符号 - exe 的主程序是交互式 shell,而导出的符号为外部程序提供功能。
这是我当前的导出宏:
#define LIB_EXP extern "C" __declspec(dllexport) void __cdecl
导出的函数:
LIB_EXP Register() { /**/ }
如果我直接使用 cl.exe - 没有任何开关 - 我会得到以下符号表,看起来不错:
00000000 characteristics
4E00E611 time date stamp Tue Jun 21 20:42:25 2011
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 00001000 Register
Summary
4000 .data
5000 .rdata
2000 .reloc
11000 .text
用VS 2010编译得到如下符号表:
00000000 characteristics
4E00E369 time date stamp Tue Jun 21 20:31:05 2011
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 00011005 Register = @ILT+0(_Register)
Summary
1000 .data
1000 .idata
3000 .rdata
1000 .reloc
1000 .rsrc
6000 .text
10000 .textbss
由于导入此 exe 的程序使用后期绑定并通过“GetProcAddress”查找导出的函数,因此我依赖于函数的名称是否与指定的完全一致。 有谁知道这个看起来有点像名称修改的混乱“= @ILT+0(_Register)”来自哪里,我该如何摆脱它? VS-C++-project 使用“空项目”模板,未修改……
【问题讨论】:
标签: visual-studio visual-c++ export exe symbols