我找到了一个用C ++创建的.dll文件。我想打开这个文件并查看类中的函数。
如何打开此文件并调用我的c ++项目中的函数?
答案 0 :(得分:1)
使用Microsoft的命令行实用程序 dumpbin
,您可以显示DLL导入或导出的内容:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<Flume name="eventLogger" compress="true" type="persistent" dataDir="./logData">
<Agent host="192.168.10.101" port="8800"/>
<RFC5424Layout enterpriseNumber="18060" includeMDC="true" appName="MyApp"/>
<Property name="keyProvider">MySecretProvider</Property>
</Flume>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="eventLogger"/>
</Root>
</Loggers>
</Configuration>
显示公开的功能。但是由你来分析内容。例如:
dumpbin /exports Test0221-5.dll
因此,在上面,您可以看到函数4.该名称对应一个符号,因此它可能是一个名为Dump of file Test0221-5.dll
File Type: DLL
Section contains the following exports for Test0221-5.dll
00000000 characteristics
555E19D5 time date stamp Thu May 21 19:45:57 2015
0.00 version
1 ordinal base
4 number of functions
4 number of names
ordinal hint RVA name
1 0 000113E3 ??0Btest@@QAE@XZ = @ILT+990(??0Btest@@QAE@XZ)
2 1 000112CB ??1Btest@@QAE@XZ = @ILT+710(??1Btest@@QAE@XZ)
3 2 00011028 ?MemberFunc@A@@UAEXXZ = @ILT+35(?MemberFunc@A@@UAEXXZ)
4 3 00011244 createInstance = @ILT+575(_createInstance)
Summary
1000 .data
1000 .idata
3000 .rdata
1000 .reloc
1000 .rsrc
C000 .text
10000 .textbss
的{{1}}函数。但是你无法找到关于它的参数或它的返回类型的更多信息。
功能1到3更具表现力。它看起来像一个函数名称,但名称中有extern "C"
createInstance()
和其他奇怪的字符。这些是“mangled”C ++名称。名称的重整取决于编译器。
MSVC有一个工具?
:
@
您可以逐个符号来称呼它。幸运的是,有一个更方便的选择:http://demangler.com/。您可以复制受损名称的完整列表(MSVC或GCC)并在浏览器中将其过去,以找出我们的示例:
undname
所以你得到了funcion的类,如果它是虚拟的,是否是静态的,返回类型,调用约定和每个参数的类型。
也许这可以帮助你,但正如你所看到的那样,它是手工制作的,并且不能完整。您没有看到例如类继承和非导出成员。