如何检测dll的类型?(COM、.NET、WIN32)

如何检测dll的类型?(COM、.NET、WIN32),.net,com,dll,file,.net,Com,Dll,File,我需要处理文件夹中的许多dll和exe文件,并确定我正在处理的文件类型:.NET、COM、Win32或其他外星生命形式 我一直在尝试确定检测DLL类型的最简单方法,您对此有何看法: COM dll =>我创建一个LoadLibrary,然后为“DllRegisterServer”获取procAddress。如果我得到一个有效的报税表,那就是一个COM文件 .NET dll =>如果dll依赖于MSCOREE.dll它始终是.NET dll Win32 dll =>如果上述两个测试都失败,它是Wi

我需要处理文件夹中的许多dll和exe文件,并确定我正在处理的文件类型:.NET、COM、Win32或其他外星生命形式

我一直在尝试确定检测DLL类型的最简单方法,您对此有何看法:

  • COM dll =>我创建一个LoadLibrary,然后为“DllRegisterServer”获取procAddress。如果我得到一个有效的报税表,那就是一个COM文件

  • .NET dll =>如果dll依赖于MSCOREE.dll它始终是.NET dll

  • Win32 dll =>如果上述两个测试都失败,它是Win32 dll

  • 当然,一定有更好的方法来检测我们正在处理的dll类型。上面的代码非常笨拙,对EXE文件不起作用?一定还有别的方法我没想到


    理想情况下,我希望能够让解析器确定编译文件时使用的编译器,以及它使用的功能,如MFC、Atl、Stl等。。。但我怀疑这在预反射时代是可能的?

    您必须检查这些文件的PE头。所有DLL和可执行文件Win32和.NET都有一个PE头


    我看不到更好的方法。然而,在2.,实际上答案是否定的。运行时主机几乎肯定也依赖于mscoree.dll,而这些不一定是.Net程序集

    .Net DLL有一个COM描述符,您可以使用dumpbin找到它。我不知道如何从代码中获取这些信息

    如果您在.Net中编程,确定程序集是否为.Net程序集的一种方法是尝试调用assembly.LoadFrom(…)


    好吧,这不是一个真正的答案,但我会研究一些技巧。

    DllRegisterServer不是必需的,COM dll唯一需要的导出是DllGetClassObject

    您好,谢谢。我以前使用过“尝试加载程序集”的方法,但它看起来非常笨拙,不是吗?听起来我需要走体育路线。可能是一个很好的可重用组件。我希望图书馆里有一个隐藏的功能可以做到这一点,但我猜不是。是的,它看起来非常笨重。。。YYUCCKK!:-)祝你好运由于链接很好,所以接受这个答案。感谢其他海报提供的宝贵意见。