假设我以完全无类型的方式获得指向COM接口的指针,只是一个原始地址
void *p
如何找到方法的地址并访问它们? * p是虚拟表的地址,然后** p是第一种方法的地址吗? COM中的所有指针都是32位吗?因此,为了找到一个特定的方法,我只需要将4个字节的倍数索引到** p,假设我知道该方法将出现在哪个索引处。是否存在BIG端与LITTLE端的潜在问题?
答案 0 :(得分:0)
是的,从技术上讲它应该指向vtable。 vtable中的方法按照它们声明的顺序出现,从IUnknown方法开始。 但是使用索引调用方法会使您的代码类型不安全。编译器无法确保您传递的参数是否正确。如果您的COM对象不在proc和其他主机上,则Big endian vs little endian很重要。代理对象会处理这些内容,因此它对客户端是透明的。