拿到dll,如何判断是com组件还是普通的dll?

zerotodream 2011-12-01 02:37:37
如题,拿到一个dll,但是不知道是com组件还是普通的dll。
用dumpbin也没显示什么具体信息。

有什么命令可以查看么?
...全文
920 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamluda123 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
这个讨论没意义,COM只是规范,如果说你要判断是不是依赖Windows系统的COM组件的话,上面的看导出函数的方法是可行的,但是,如整个COM体系都是另一种实现的话,而且你不知道这种实现那就根本没有办法判断。
[/Quote]

说的完全正确.
openoffice 的COM 就无法这样判断
yyps 2011-12-06
  • 打赏
  • 举报
回复
regsvr32 youdll.dll 看一下注册提示,如果是普通dll 他肯定会提示找不到 注册入口。
Tishion 2011-12-03
  • 打赏
  • 举报
回复
这个讨论没意义,COM只是规范,如果说你要判断是不是依赖Windows系统的COM组件的话,上面的看导出函数的方法是可行的,但是,如整个COM体系都是另一种实现的话,而且你不知道这种实现那就根本没有办法判断。
zerotodream 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wshcdr 的回复:]

这个,一般应该是告知...或者就用Depends, 如果是那特定的五个函数,
1)DllMain:Dll的入口函数,完成一些Dll的初始化工作(DirectShow实现的是DllEntryPoint);
2)DllGetClassObject:用于获得类工厂指针;
3)DllCanUnloadNow: 系统空闲时会调用这个函数,以确定是否可以卸载Dll;
4)DllRegisterSer……
[/Quote]

原来depends是看dll依赖关系的工具,不过在VS2008中被去除了,只能单独下了……
下载地址:
http://www.dependencywalker.com/depends22_x86.zip

那还有第三个问题没解决,Help~

3.如下面的dumpbin导出,name字段DllRegisterServer = _DllRegisterServer@0表示什么意思呀?普通的dll name字段就是一个符号而已……
zerotodream 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wshcdr 的回复:]

这个,一般应该是告知...或者就用Depends, 如果是那特定的五个函数,
1)DllMain:Dll的入口函数,完成一些Dll的初始化工作(DirectShow实现的是DllEntryPoint);
2)DllGetClassObject:用于获得类工厂指针;
3)DllCanUnloadNow: 系统空闲时会调用这个函数,以确定是否可以卸载Dll;
4)DllRegisterSer……
[/Quote]

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

就应该是COM
zerotodream 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zerotodream 的回复:]

引用 1 楼 mydo 的回复:

简单的方法是看导出函数名称。


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

第三点错了,我发现我写的dll,name字段是××=××格式的,但是别人的dll有些没等号的……
zerotodream 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chengbar 的回复:]

可以尝试注册一下
[/Quote]

注册是指regsvr32 dll么?普通的dll也可以注册的吧?
zerotodream 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mydo 的回复:]

简单的方法是看导出函数名称。
[/Quote]

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

4 3 00001050 DllRegisterServer = _DllRegisterServer@0
firmbird 2011-12-01
  • 打赏
  • 举报
回复
Depends
DllGetClassObject

楼上的方法不错,可以判断DllRegisterServer有没有导出
sevancheng 2011-12-01
  • 打赏
  • 举报
回复
可以尝试注册一下
大熊猫侯佩 2011-12-01
  • 打赏
  • 举报
回复
简单的方法是看导出函数名称。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧