gpt4 book ai didi

reflection - 你如何找到没有 typelib 的 COM 接口(interface)?

转载 作者:行者123 更新时间:2023-12-04 00:33:55 26 4
gpt4 key购买 nike

即使 TypeLib 完全为空,是否可以找到通常使用组件对象模型 (COM) TypeLib 注册的所有接口(interface)(类、参数等)?如果是这样,你会怎么做?我相信另一个术语是“匿名 COM”。我确信此 COM 存在可访问的接口(interface),因为我有一个应用程序正在使用 TypeLib 中未列出的类。

最佳答案

如果类型库为空,则无法在 COM 库中找到有关类型的信息。

您至少需要 typelib 中的一个 coclass 条目才能找到 IUnknown 的实现。 .

如果你有,那么你实际上可以创建类的实例,然后调用 QueryInterface在 IUnknown 上为 IDispatch实现(如果存在)。

如果存在 IDispatch 接口(interface),则可以调用 GetTypeInfo获取有关已实现接口(interface)的信息。

如果您需要对 IDispatch 进行后期绑定(bind)调用,则需要调用 Invoke method .

请注意,您提到了类型库,但进程内 COM 服务器通常将类型库嵌入到 dll 中,即库中表示的类型的实现。你确定你也没有检查过吗?或者你确定你有类型库并且它确实是空白的?

如果类型库确实是空白并且 dll 不包含它,那么从其他客户端针对它编译的意义上说,类型库完全有可能是“私有(private)的”。 COM 在运行时不一定需要类型库。暴露模式IClassFactory interface实现是导出具有众所周知的签名的标准 DLL 函数。

可以轻松调用LoadLibrary ,然后调用GetProcAddress并将结果转换为 IClassFactory。从那里,他们将使用他们知道的私有(private) GUID 和 IID(不是来自类型库)以及他们已经私有(private)定义并从那里工作的 COM 接口(interface)。

对于这样的事情,我能想到的唯一理由是一种混淆和/或解决隐私/安全问题的形式,只允许服务器生产者批准的客户端调用它。

它对您没有帮助,但可以解释为什么您看到的类型库中没有任何信息,同时看到其他客户端使用该库。

关于reflection - 你如何找到没有 typelib 的 COM 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2365500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com