如题,拿到一个dll,但是不知道是com组件还是普通的dll。
用dumpbin也没显示什么具体信息。有什么命令可以查看么?

解决方案 »

  1.   

    Depends
    DllGetClassObject楼上的方法不错,可以判断DllRegisterServer有没有导出
      

  2.   


    1.com组件的导出函数里包含了一些特别函数如DllRegisterServer ,是不是只要包含了DllRegisterServer 的,就都是com?
    2.如果普通dll也刚好实现了这些函数,那怎么办?
    3.如下面的dumpbin导出,name字段DllRegisterServer = _DllRegisterServer@0表示什么意思呀?普通的dll name字段就是一个符号而已……         4    3 00001050 DllRegisterServer = _DllRegisterServer@0
      

  3.   


    注册是指regsvr32 dll么?普通的dll也可以注册的吧?
      

  4.   


    第三点错了,我发现我写的dll,name字段是××=××格式的,但是别人的dll有些没等号的……
      

  5.   

    这个,一般应该是告知...或者就用Depends, 如果是那特定的五个函数,
    1)DllMain:Dll的入口函数,完成一些Dll的初始化工作(DirectShow实现的是DllEntryPoint);
    2)DllGetClassObject:用于获得类工厂指针;
    3)DllCanUnloadNow: 系统空闲时会调用这个函数,以确定是否可以卸载Dll;
    4)DllRegisterServer:将COM组件注册到注册表中;
    5)DllUnregisterServer: 删除注册表中COM组件的注册信息。就应该是COM
      

  6.   


    depends是什么呀?是指用dumpbin 查看导出函数么?
      

  7.   


    原来depends是看dll依赖关系的工具,不过在VS2008中被去除了,只能单独下了……
    下载地址:
    http://www.dependencywalker.com/depends22_x86.zip那还有第三个问题没解决,Help~3.如下面的dumpbin导出,name字段DllRegisterServer = _DllRegisterServer@0表示什么意思呀?普通的dll name字段就是一个符号而已……
      

  8.   

    这个讨论没意义,COM只是规范,如果说你要判断是不是依赖Windows系统的COM组件的话,上面的看导出函数的方法是可行的,但是,如整个COM体系都是另一种实现的话,而且你不知道这种实现那就根本没有办法判断。
      

  9.   

    regsvr32 youdll.dll  看一下注册提示,如果是普通dll 他肯定会提示找不到 注册入口。
      

  10.   


    说的完全正确.
    openoffice 的COM 就无法这样判断