代码之家  ›  专栏  ›  技术社区  ›  Stein Åsmul

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

  •  13
  • Stein Åsmul  · 技术社区  · 16 年前

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

    1. =>我创建一个LoadLibrary,然后获取“的ProcAddress” 注册过程 “。如果我得到一个有效的报税表,它是一个COM文件。

    2. .NET动态链接库 =>如果dll依赖于 它总是一个.NETDLL?

    3. =>如果上述两个测试都失败,它是Win32 dll吗?

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

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

    3 回复  |  直到 16 年前
        1
  •  6
  •   Rob Stewart    7 年前

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

    An In-Depth Look into the Win32 Portable Executable File Format

    The .NET File Format

    Portable Executable

        2
  •  5
  •   Anders    16 年前

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

        3
  •  1
  •   Rui Craveiro    16 年前

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

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