2012-07-21 74 views
2

想我得到一个指向一个COM接口,一个完全非类型化的方式只是一种原始地址COM的内存布局和方法指针大小

void *p 

如何找到方法的地址,并访问它们? * p是虚拟表的地址,然后** p是第一个方法的地址?所有指针始终在COM中包含32位吗?为了找到一个特定的方法,我只需要以4个字节的倍数索引到** p中,假设我知道该方法将出现在哪个索引处。是否有任何潜在的BIG endian和LITTLE endian的问题?

+0

这完全没有定义。为什么你甚至想知道什么? – 2012-07-21 22:15:34

+0

你是什么意思undefined?我认为COM的重点是它是一个二进制规范? – user782220 2012-07-21 22:20:09

+0

是的,从技术上讲它应该指向vtable。 vtable中的方法以声明的顺序出现,从IUnknown方法开始。但使用索引调用方法将使您的代码类型不安全。编译器无法确保您传递的参数是否正确。如果您的COM对象超出了proc以及其他主机,则Big endian与小端存在关系。代理对象处理这些东西,所以它对客户端来说是透明的。 – 2012-07-22 18:19:52

回答

0

是的,从技术上讲它应该指向vtable。 vtable中的方法以声明的顺序出现,从IUnknown方法开始。 但使用索引调用方法会使您的代码类型不安全。编译器无法确保您传递的参数是否正确。如果您的COM对象超出了proc以及其他主机,则Big endian与小端存在关系。代理对象处理这些东西,所以它对客户端来说是透明的。