2

假设我以完全无类型的方式获得指向 COM 接口的指针,就像原始地址一样

void *p

如何找到方法的地址并访问它们?*p 是虚拟表的地址,然后 **p 是第一种方法的地址吗?是否所有涉及 32 位的指针总是在 COM 中?因此,要找到一个特定的方法,我只需要将 4 字节的倍数索引到 **p 中,假设我知道该方法将出现在哪个索引处。BIG endian vs LITTLE endian 有什么潜在的问题吗?

4

1 回答 1

0

是的,从技术上讲,它应该指向 vtable。vtable 中的方法按照它们声明的顺序出现,从 IUnknown 方法开始。但是使用索引调用方法会使您的代码类型不安全。编译器无法确保您将传递的参数是否正确。如果您的 COM 对象不在 proc 和其他主机上,则大端与小端很重要。代理对象负责处理这些内容,因此它对客户端是透明的。

于 2012-07-27T20:37:53.110 回答