我正在尝试创建代理dll并遇到了这个问题。 假设我有以下文件:
a.cpp:
extern "C" int __declspec(dllexport) func(int x) {return x;}
a.def:
EXPORTS
func
??4Test@@QAEAAU0@ABU0@@Z = func
然后我跑:
cl /c c.cpp
link /RELEASE /DLL /DEF:c.def /OUT:c.dll c.obj
dumpbin /exports c.dll
的输出表明导出了以下符号:
FUNC
?? 4Test
其余的“测试”导出名称在哪里?有没有办法让它回来?
答案 0 :(得分:0)
改为使用DEF文件,而不是使用DEF文件:
extern“C”__ declspec(dllexport)int __cdecl func(int x){return x;}
现在它根本不应该破坏函数名称。
答案 1 :(得分:0)
我想到了一个想法:使用与“@”不同的占位符字符(例如“^”)导出符号,然后通过将DLL视为PE文件并重写导出表条目来重写导出表在磁盘上。