更改COM DLL的接口guid(ressource patch)

时间:2010-03-11 12:39:29

标签: interface com guid patch

我必须构建一个COM库(DLL)的OEM版本。 有没有人知道一个工具(ressource hacker)可能会在构建时间之后替换我的一些界面guid?

我只是想构建并测试一个DLL并在之后生成OEM版本。

2 个答案:

答案 0 :(得分:1)

我不知道的工具。您可以使用自动构建过程来实际构建具有不同GUID的dll#。

答案 1 :(得分:0)

替换已编译二进制文件中的接口ID并不容易。它们通常是硬编码的,编译器会将它们分配到静态存储中,它们甚至可能具有静态链接,因此您在查找它们时会遇到问题。还记得QueryInterface()通常是如何实施的吗?

HRESULT CImpl::QueryInterface( IID& iid, void** result )
{
    if( iid == __uuidof( IInterfaceThisClassImplements1 ) ) {
       *result = static_cast<IInterfaceThisClassImplements1*>( this );
    } else {
       ///same stuff for other interfaces
    }
    //call AddRef() if succeeded
}

它不仅限于资源编辑,您必须实际修补二进制图像的静态数据,并且可能没有工具可以自动为您执行此操作。

由于您拥有完整的资源,您最好的选择就是重建二进制文件。