我正在尝试重新打包一个由多个库、COM 接口和一个 COM 自动化服务器组成的专有应用程序。
我的精简发行版不起作用。
使用函数调用监视器(RohitLab API 监视器),我已经确定对 IGlobalInterfaceTable::RegisterInterfaceInGlobal 的调用会为剥离版本中的 cookie 返回零值;在正确的完整安装中,它总是返回 256。
文档说“无效 cookie 的值为 0”。
这很有趣,但是应用程序忽略了零返回值并使用 256 代替(总是?)用于 IGlobalInterfaceTable::GetInterfaceFromGlobal,并且稍后不起作用,因为它试图将接口返回的 NULL 指针连接到其他 COM 对象.
它不会崩溃,只是不会按预期工作。
问题:为什么 RegisterInterfaceInGlobal 会返回零值?包含此接口类型库的 dll 使用 regsvr32 注册。顺便说一句,它似乎加载了另一个 dll,它也是一个 COM 库,但其中没有类型库。