Interface 更改COM DLL的接口GUID(ressource修补程序)

Interface 更改COM DLL的接口GUID(ressource修补程序),interface,com,guid,patch,Interface,Com,Guid,Patch,我必须构建COM库(DLL)的OEM版本。 有人知道一个工具(ressource hacker)可以在构建后替换我的一些界面GUI吗 我只想构建和测试一个DLL,然后生成OEM版本。我所知没有工具。您可以使用自动构建过程来实际构建具有不同GUID的dll。据我所知,没有工具。您可以使用自动构建过程来实际构建具有不同GUID的dll。在编译的二进制文件中替换接口ID并不是那么容易。它们通常是硬编码的,编译器在静态存储中分配它们,它们甚至可能具有静态链接,因此您将很难找到它们。还记得QueryInt

我必须构建COM库(DLL)的OEM版本。 有人知道一个工具(ressource hacker)可以在构建后替换我的一些界面GUI吗


我只想构建和测试一个DLL,然后生成OEM版本。

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

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

在编译的二进制文件中替换接口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
}
HRESULT CImpl::QueryInterface(IID&IID,void**result)
{
if(iid==(IInterfaceThisClassImplements1)){
*结果=静态施法(本);
}否则{
///其他接口也一样
}
//如果成功,则调用AddRef()
}
它不仅限于资源编辑,您必须实际修补二进制图像的静态数据,而且可能没有工具能够为您自动完成这项工作


既然您拥有完整的源代码,最好的办法就是重新生成二进制文件。

在编译的二进制文件中替换接口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
}
HRESULT CImpl::QueryInterface(IID&IID,void**result)
{
if(iid==(IInterfaceThisClassImplements1)){
*结果=静态施法(本);
}否则{
///其他接口也一样
}
//如果成功,则调用AddRef()
}
它不仅限于资源编辑,您必须实际修补二进制图像的静态数据,而且可能没有工具能够为您自动完成这项工作


既然您拥有完整的源代码,那么最好的办法就是重建二进制文件。

这就是我们目前所做的。但通过这一点,我们必须建立和测试每个OEM版本-而不是只有一个!我们现在就是这么做的。但通过这一点,我们必须建立和测试每个OEM版本-而不是只有一个!