描述:
有一个别人写的com,不知道应该怎么用,想看看他自己带的客户端是怎么调用这个com的。
另外写个com做中介调用原来的com行不行??客户端调用新的com的时候把调用的过程都记下来。
解决方案1:
写个com做中介调用原来的com跟直接调用一样,必须知道怎么调用别人的com。一般是需要com的文档才能使用别人的com,因为本身com的一个目的就是把函数的功能实现隐藏起来,不知道文档,直接靠一个com组件的EXE或DLL文件很难知道客户端是怎么调用这个com的。
解决方案2: 1.没错,你必须改注册表让那个clsid指向你的dll,然后,你可以把原dll放在同一目录中,自己loadlibrary,调用其DllGetClassObject,com库无非也是这么做的。只不过loadlibrary需要从注册表中查而已。
2.这么研究恐怕事倍功半,最好有原组件的详细文档。或者自己做一个测试该组件的程序,详细考察其每一个接口。个人感觉很麻烦。主要很多时候其系统内部并不只一个组件。
开发组件并不一定要使用atl。不熟的话就别用了。《com技术内幕》有很多框架代码。
你还得改注册表呢,否则调不到你的dll。找些资料看看。
解决方案4: 包容就是把那个别人的组件作为你自己的组件的一个数据成员,
你组件也暴露和别人的组件一样的接口
对于每个接口函数的实现都传给成员
在传给成员之前,就可以进行一些跟踪处理了
比如:
HRESULT CYOURCOMPONENT::SOMEFUN()
{
TRANCE("CALL SOMEFUN");//跟踪
return m_pothers->SOMEFUN();
}
你可以用ole view看它的类型库
然后根据类型库,用包容
这样应该可以跟踪客户端的调用