Cha*_*les 18 .net dll assemblies unmanaged managed
我在你面前拿着一个DLL.仅使用Win32 SDK,您能告诉我这个DLL是否是.NET程序集吗?
为什么?我们的应用程序以DLL的形式加载插件.我们正在尝试扩展这些插件的定义以允许.NET程序集,但接口将是不同的,因此加载器将需要知道DLL在加载之前是管理还是非管理.
Dav*_*dRR 21
为了确定一个DLL(或EXE)是否被托管或非托管,使用dumpbin.exe与所述/dependents开关.如果mscoree.dll在输出中看到,则程序集是托管程序集.
例如,对于我在Visual Studio 2010中创建的托管DLL,我得到以下输出:
Dump of file <MANAGED_DLL>.dll
File Type: DLL
Image has the following dependencies:
mscoree.dll
Summary
2000 .reloc
2000 .rsrc
2000 .sdata
12000 .text
Run Code Online (Sandbox Code Playgroud)
dumpbin.exe作为Visual Studio工具的一部分提供.要运行它,一种方便的方法是通过Visual Studio命令提示符.例如,在运行Visual Studio 2010的Windows 7计算机上,我在Windows开始菜单中找到Visual Studio命令提示符:
Microsoft Visual Studio 2010 => Visual Studio工具 => Visual Studio命令提示符(2010)
然后,在Visual Studio命令提示符中输入:
dumpbin /dependents DLL_OF_INTEREST.DLL
Run Code Online (Sandbox Code Playgroud)
要么
dumpbin /dependents EXE_OF_INTEREST.EXE
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用corflags.exeVisual Studio Tools附带的实用程序.在非托管程序集上从Visual Studio命令提示符运行它:
corflags UNMANAGED.DLL
Run Code Online (Sandbox Code Playgroud)
..你会得到:
corflags : error CF008 : The specified file does not have a valid managed header
Run Code Online (Sandbox Code Playgroud)
...而在托管程序集上,你会得到类似的东西:
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 1
ILONLY : 1
32BIT : 0
Signed : 0
Run Code Online (Sandbox Code Playgroud)
有关: