我的任务是尝试重新创建一个对原始DLL有轻微修改的DLL,如果另一个程序运行,它将被执行。基本上是一个模拟的DLL版本,用于测试/模拟更大系统的其他部分。
我已经搜索了是否有任何方法来检查库是COM还是DCOM,但是没有找到任何方法。我是意识到 差异,但是给了DLL库,如何判断它是COM还是DCOM库?
此外,是否有任何方法可以用较新的技术替换COM/DCOM库,但不更改调用COM/DCOM库的部分代码?
发布于 2015-06-22 10:45:07
如果只使用可执行代码,则无法判断是哪个代码,但如果其中附带有代理/存根dll,则可以假设它是DCOM。
可见的不同之处在于事物的注册方式。深入了解注册过程可能很容易,也可能不那么容易,这取决于注册是如何实现的。如果注册参数是手工粘贴在代码中,您将不得不反向工程,这是更困难的方式。如果注册使用存储在资源中的.rgs文件,您只需提取它并查看注册是如何完成的。无论如何,您最好的选择是使用VM并导出其注册表,然后注册组件,再次导出注册表并查看差异--添加了什么。
发布于 2015-06-19 15:07:53
哇,你在这里要变老了!
如果我没记错的话,任何有效的COM对象也可以参加DCOM。远程过程调用的连接不是在操作系统级别完成的吗?
来自https://msdn.microsoft.com/en-us/library/aa295360(v=vs.60).aspx
一旦调整了COM以跨网络工作,则任何不绑定到本地执行模型的接口(一些接口固有地依赖本地机器设施,例如那些绘制方法将设备上下文作为参数处理的接口)将具有被分发的能力:接口使用者将对给定接口提出请求;该接口可能由运行(或将运行)在不同机器上的对象的实例提供。COM内部的分发机制将使用者连接到提供者,从而使使用者发出的方法调用出现在提供者端,并在那里执行它们。然后,任何返回值都会被发回给使用者。对于所有意图和目的,分发行为对消费者和提供者都是透明的。 现在确实存在这样一种COM。DCOM (用于“分布式COM”)是从4.0版开始随Windows版本一起提供的。自1996年底以来,Windows 95及其衍生产品也开始使用它。在这两种情况下,DCOM都由一组替换和附加DLL组成,其中包含一些实用程序,这些实用工具提供本地和远程COM功能。因此,它现在是基于will 32平台的固有部分,随着时间的推移,其他组织将在其他平台上提供它。
https://stackoverflow.com/questions/30940889
复制相似问题