2012-07-21 27 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與小端存在關係。代理對象處理這些東西,所以它對客戶端來說是透明的。